2011-08-11 11 views
5

Tengo un problema con el conjunto de caracteres de la tabla mysql. Cada tabla en mi base de datos tiene juego de caracteres predeterminado. Por ejemplo:Mysql cambia el juego de caracteres predeterminado de la tabla al conjunto de caracteres de la base de datos

CREATE TABLE privacy_settings (
    id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
    id_account int(11) NOT NULL, 
    setting_name varchar(255) NOT NULL DEFAULT '0', 
    privacy_level int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id_privacy_setting), 
    KEY fk_privacy_settings_accounts (id_account), 
    CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

Quiero quitar el bloque de caracteres predeterminado, por lo que la mesa podría utilizar la base de datos por defecto charset:

CREATE TABLE privacy_settings (
     id_privacy_setting int(11) NOT NULL AUTO_INCREMENT, 
     id_account int(11) NOT NULL, 
     setting_name varchar(255) NOT NULL DEFAULT '0', 
     privacy_level int(11) NOT NULL DEFAULT '0', 
     PRIMARY KEY (id_privacy_setting), 
     KEY fk_privacy_settings_accounts (id_account), 
     CONSTRAINT fk_privacy_settings_accounts FOREIGN KEY (id_account) REFERENCES accounts (id_account) ON DELETE NO ACTION ON UPDATE NO ACTION 
    ) ENGINE=InnoDB 

¿Hay alguna manera de hacer esto sin volver a crear la tabla?

Respuesta

9

Para cambiar el juego de caracteres de una mesa, de MySQL Documentation:

Si desea cambiar el carácter defecto de la tabla y todas las columnas de caracteres (CHAR, VARCHAR, TEXT) a un nuevo conjunto de caracteres, utilice una sentencia como esta :

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

Si desea convertir una base de datos completa para utilizar un juego de caracteres predeterminado diferente, puede emitir esta declaración: (de Default Character Set and Collation)

ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name; 
+0

lo sé, pero cuando lo hago, 'bloque CHARSET' DEFAULT no se quita de mi definición de la tabla – Ris90

+0

Es posible que desee cambiar la base de datos completa a continuación. He agregado más información a la respuesta. Sospecho que el juego de caracteres predeterminado y el conjunto de caracteres activo puede ser diferente para su tabla, pero depende de cómo esté generando la definición. 'SHOW CREATE TABLE tbl_name' debería funcionar. Después de ejecutar una instrucción 'ALTER TABLE' para cambiar el conjunto de caracteres, la consulta' SHOW CREATE TABLE ... 'muestra el nuevo juego de caracteres como el CHARSET POR DEFECTO. Para obtener una lista de conjuntos/intercalaciones, use ['SHOW COLLATION'] (http://dev.mysql.com/doc/refman/5.1/en/show-collation.html). – JYelton

+0

Quiero eliminar completamente el bloque DEFAULT CHARSET de la definición de la tabla, no cambiar el charset predeterminado para la tabla, pero eliminar este bloque para hacer que cada tabla use la codificación de la base de datos – Ris90

2

Usted puede usar lo siguiente para cambiar el cotejo y caracteres predeterminado para tablas y esquemas:

alter table TABLENAME convert to CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
alter database SCHEMA default character set utf8 COLLATE utf8_unicode_ci; 
Cuestiones relacionadas