2010-01-25 8 views
14

En MySQL 5.x ¿Cuál es la diferencia si hago algo como esto:Creando una tabla mysql con un conjunto explícito de caracteres por defecto, ¿y si no?

CREATE TABLE aTable (
    id      BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    aNumber   bigint(20) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8; 

con esto:

CREATE TABLE aTable (
    id      BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    aNumber   bigint(20) DEFAULT NULL 
) ENGINE=InnoDB CHARACTER SET=utf8; 

Aviso No estoy especificando el conjunto de caracteres por defecto en la primera. No pude encontrar nada en los documentos de mysql.

+4

Tenga en cuenta que el conjunto de caracteres 'utf8' de MySQL está roto. [Utilice MySQL 'utf8mb4' si desea soporte completo de Unicode] (https://stijndewitt.wordpress.com/2015/06/15/use-mysql-utf8mb4-if-you-want-full-unicode-support/). –

Respuesta

19

La palabra DEFAULT es opcional allí, por lo que las dos son equivalentes, es decir, establecen el juego de caracteres predeterminado para la tabla.

Consulte la documentación de MySQL para CREATE TABLE. Aquí está la parte relevante:

table_option: 
    ENGINE [=] engine_name 
    ... other options ... 
    | [DEFAULT] CHARACTER SET [=] charset_name 
    ... more options ... 

Puede confirmar esto con el comando SHOW CREATE TABLE.

9

Hay 4 niveles de configuraciones predeterminadas en MySQL: servidor, base de datos, tabla y columna. Usando los valores predeterminados de nivel inferior, puede anular los valores predeterminados de palanca más altos.

Si modifica una tabla que tiene juego de caracteres predeterminado establecido en algo distinto de lo que la base de datos ha establecido, la tabla predeterminada reemplazará el valor predeterminado de db.

+0

Votación hacia arriba para la explicación de los cuatro niveles. Tenía una base de datos y un conjunto de columnas, pero no una tabla. ¡Gracias! – HoldOffHunger

Cuestiones relacionadas