10bet网址
MySQL 8.0参考手册
相关文件10bet官方网站 本手册下载
PDF (Ltr)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5MB.
HTML下载(邮政编码)- 9.6MB.
HTML下载(RPM)- 8.1 mb
手册页(TGZ)- 260.5 kb
男人页(zip)- 371.7KB.
信息(GZIP)- 3.9 mb
信息(zip)- 3.9 mb
从本手册中摘录

10.7列字符集转换

要转换二进制或非边数字符串列以使用特定字符集,请使用ALTER TABLE.若要成功转换,必须满足以下条件之一:

  • 如果列具有二进制数据类型(二进制VARBINARY斑点),它包含的所有值必须使用单个字符集(要将列转换为的字符集)进行编码。如果使用二进制列以多个字符集存储信息,MySQL无法知道哪个值使用哪个字符集,也无法正确地转换数据。

  • 如果列具有非inary数据类型(charVARCHAR文本),其内容应在列字符集中编码,而不是一些其他字符集。如果内容在不同的字符集中编码,则可以将列转换为首先使用二进制数据类型,然后使用所需字符集的非纳尼列。

假设一个表t有一个二进制列命名col1定义为VARBINARY (50).假设列中的信息是使用单个字符集编码的,那么可以将其转换为具有该字符集的非二进制列。例如,如果col1包含表示字符中的二进制数据希腊字符集,你可以转换它如下:

ALTER TABLE t MODIFY col1 VARCHAR(50) CHARACTER SET greek;

如果您的原始列有一种类型二进制(50),你可以将它转换为CHAR (50),但结果值被填充0 x00最后的字节,这可能是不可取的。要删除这些字节,请使用修剪()功能:

更新T Set Col1 = TRIM(从COL1尾随0x00);

假设表t非二进制列命名col1定义为Char(50)字符集拉丁文1但是你想把它转换为使用UTF8.这样您就可以存储来自多种语言的值。下面的语句实现了这一点:

ALTER TABLE TOMIFY COL1 CHAR(50)字符集UTF8;

如果列包含不在两个字符集中的字符,则转换可能会有损。

如果您有MySQL 4.1之前的旧表,其中非二进制列包含的值实际上是用与服务器默认字符集不同的字符集编码的,那么就会出现一种特殊情况。例如,应用程序可能已经存储SJIS.列中的值,即使MySQL的默认字符集不同。可以将列转换为使用合适的字符集,但需要额外的步骤。假设服务器的默认字符集是latin1col1被定义为CHAR (50)但它的内容是SJIS.值。第一步是将列转换为二进制数据类型,这将删除现有的字符集信息,而不执行任何字符转换:

更改表T修改Col1 Blob;

下一步是将列转换为具有适当字符集的非二进制数据类型:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET sjis;

此过程要求该表未在诸如此类语句中进行修改或者更新升级到MySQL 4.1或更高版本后。在这种情况下,MySQL将在列中存储新的值使用latin1,而列将包含混合SJIS.latin1值并且无法正确转换。

如果您在最初创建列时指定了属性,那么在更改表时也应该指定它们ALTER TABLE.例如,如果您指定了非空和一个明确的默认的值,您还应该在ALTER TABLE声明。否则,结果列定义不包括这些属性。

要转换表中的所有字符列,请使用alter table ...转换为字符集Charset.声明可能有用。看Section 13.1.9, " ALTER TABLE Statement "