字符集和Collations的一般介绍

一个character set (字符集)是一组符号和编码,而一个 collation 是在一个字符集里

比较字符的一套规则,让我们通过一个虚构的字符集例子来说明区别。

假设我们有个四个字母的字母表:`A', `B', `a', `b'.我们给每个字母一个编号:

`A' = 0, `B' = 1, `a' = 2, `b' = 3. 字母`A' 是一个符号,而数字0是 `A' 的

encoding(编码),而这四个字母和他们的编码合起来就是一个字符集(character set)。

现在,假设我们要比较两个字符串的值,`A' 和`B',最简单的方法是看编码,`A' 是 0

而 `B'是 1. 因为0比1小,我们就说`A' 比 `B' 小。现在,我们就算已经对我们的字符

集使用了一个collation,collation 是一组规则(在这个例子里只有一条规则):

"比较编码".我们把所有可能的 collation 中最简单的这种叫做binary collation

但是如果我们想让大写字母和小写字母一样怎么办?那么我们就得有两条规则:

(1)把小写字母`a' 和 `b' 看作跟 `A' 和 `B'相等;

(2)然后比较编码。

我们称这是一个case-insensitive collation(不区分大小写的 collation).

这比binary collation 稍微复杂了一点。

在实际生活中,大多数字符集都包含很多字符:不是仅仅`A'和`B' 而是整个字母表,

有时是多个字母表或者东方书写系统里几千的字符,和很多专有符号和标点符。

并且在实际生活中,大多数的collations 有很多规则:除了不区分大小写外还有不区分

重音(重音``accent'' 是像在德语里字符附加的重音符那样的)和多字符映射。

MySQL 4.1 可以为你做以下事:

·使用各种字符集存储字符串

·使用各种collation比较字符串。

·在同一台服务器上或者同一个数据库甚至同一个表中使用不同的字符集和collation混合

·允许在任何级别上指明字符集和collation

在这些方面,MySQL 4.1 不只远远比MySQL 4.0复杂,也比其他DBMS先进很多。不过要想

有效的使用这些新特性,你需要学习哪些字符集和collation是可用的,怎样把他们改成

默认,还有各种字符串运算符如何操作他们。

10.2 MySQL 里的字符集和Collations

MySQL 服务器可支持多个字符集。要列出可用的字符集,使用 SHOW CHARACTER SET 语句:

mysql> SHOW CHARACTER SET;

+----------+-----------------------------+---------------------+

| Charset | Description | Default collation |

+----------+-----------------------------+---------------------+

| big5 | Big5 Traditional Chinese | big5_chinese_ci |

| dec8 | DEC West European | dec8_swedish_ci |

| cp850 | DOS West European | cp850_general_ci |

| hp8 | HP West European | hp8_english_ci |

| koi8r | KOI8-R Relcom Russian | koi8r_general_ci |

| latin1 | ISO 8859-1 West European | latin1_swedish_ci |

| latin2 | ISO 8859-2 Central European | latin2_general_ci |

...

输出实际上包含另一列,这里为了让例子在页面上显示更合适,没显示出来

任一给出的字符集至少包含一个collation. 它可能包含多个 collations.

要列出一个字符集的 collations , 使用 SHOW COLLATION 语句. 例如, 要看latin1

(``ISO-8859-1 West European'')的collations, 使用这个语句来找到哪些名字以latin1

开头的collation

mysql> SHOW COLLATION LIKE 'latin1%';

+-------------------+---------+----+---------+----------+---------+

| Collation | Charset | Id | Default | Compiled | Sortlen |

+-------------------+---------+----+---------+----------+---------+

| latin1_german1_ci | latin1 | 5 | | | 0 |

| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |

| latin1_danish_ci | latin1 | 15 | | | 0 |

| latin1_german2_ci | latin1 | 31 | | Yes | 2 |

| latin1_bin | latin1 | 47 | | Yes | 1 |

| latin1_general_ci | latin1 | 48 | | | 0 |

| latin1_general_cs | latin1 | 49 | | | 0 |

| latin1_spanish_ci | latin1 | 94 | | | 0 |

+-------------------+---------+----+---------+----------+---------+

latin1 collations 有下列含义:

Collation 含义

latin1_bin Binary according to latin1 encoding

latin1_danish_ci Danish/Norwegian

latin1_general_ci Multilingual

latin1_general_cs Multilingual, case sensitive

latin1_german1_ci German DIN-1

latin1_german2_ci German DIN-2

latin1_spanish_ci Modern Spanish

latin1_swedish_ci Swedish/Finnish

Collations 有这些一般特性:

·两个不同字符集没法拥有同一个collation.

·每个字符集有一个默认 collation. 例如, latin1 的默认 collation 是

latin1_swedish_ci.

·collation 的命名有个约定: 他们由所关联的字符集的名字打头,他们通常包含一个

语言名, 并以 _ci (case insensitive大小写不敏感),

或者 _cs (case sensitive大小写敏感), 或者 _bin (binary二进制).

10.3 决定默认字符集和 Collation

有四个级别上的默认字符集和collation设置: 服务器,数据库,表和连接。下面的描述

可能看起来复杂,不过实践中得出多级默认设置可以带来自然而然的结果。

10.3.1 服务器级字符集和 Collation

MySQL服务器有一个服务器级别的字符集和 collation, 不能为空。

MySQL 这样决定服务器级的字符集和collation

·当服务器开始按照有效选项设置

·运行期间按照变量

在服务器级别,决定是很简单的,依靠你执行mysqld时使用的选项来决定服务器字符集

和collation。你可以使用--default-character-set 来指定字符集,并且和这个一起

还可以为collation加上--default-collation 。如果你不指定字符集,就相当于说

--default-character-set=latin1。如果你只指定了字符集(例如,latin1)但是没有指定

collation,就相当于

--default-charset=latin1 --default-collation=latin1_swedish_ci

因为 latin1_swedish_ci是latin1字符集的默认collation, 因此下面三个命令都具有

同样效果:

shell> mysqld

shell> mysqld --default-character-set=latin1

shell> mysqld --default-character-set=latin1 /

--default-collation=latin1_swedish_ci

有个改变这个设置的方法是重新编译,如果你想编译源码来改变默认的服务器字符集和

collation,在configure使加上参数--with-charset 和 --with-collation ,例如:

shell> ./configure --with-charset=latin1

或者:

shell> ./configure --with-charset=latin1 /

mysqld 和configure 都会核实字符集/collation的结合是否有效,如果无效,这两个

程序都会报错并中止。

现行服务器字符集和collation 是和character_set_server 和 collation_server

这两个系统变量的值一样,这些变量可以在运行时更改

10.3.2 数据库字符集和 Collation

每个数据库都有一个数据库字符集和数据库collation,并且不能为空,CREATE DATABASE

和 ALTER DATABASE 语句有专门指明数据库字符集和collation的可选子句:

CREATE DATABASE db_name

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

ALTER DATABASE db_name

[[DEFAULT] CHARACTER SET charset_name]

[[DEFAULT] COLLATE collation_name]

例子:

CREATE DATABASE db_name

DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

MySQL可以这样选择数据库字符集和数据库collation:

·如果 CHARACTER SET X 和 COLLATE Y 被指定了, 那么字符集是 X collation 是 Y.

·如果 CHARACTER SET X 被指定,但是没有指定 COLLATE, 那么字符集是 X collation

是默认collation.

·否则, 就用服务器字符集和服务器 collation.

MySQL 的 CREATE DATABASE ... DEFAULT CHARACTER SET ... 语法类似于标准 SQL

的 CREATE SCHEMA ... CHARACTER SET ... 语法. 因为这样, 就可能在同一个MySQL

服务器上创建具有不同字符集和collation的数据库。

如果在建表的语句里没有指定表的字符集和collation,那么数据库字符集和 collation

就作为表的字符集和collation的默认值. 它们没有别的作用。

默认数据库的字符集和 collation是和 character_set_database 以及

collation_database 这两个系统变量的值一样。 当默认数据库更改时服务程序会设置

这些变量的值。如果没有默认数据库, 变量的值会和配套的服务器级系统变量

character_set_server 以及 collation_server的值一致.

10.3.3 表字符集和 Collation

每个表有一个表字符集以及一个表collation,不能为空。CREATE TABLE 和 ALTER TABLE

语句有可选子句指定表字符集和collation。

CREATE TABLE tbl_name (column_list)

[DEFAULT CHARACTER SET charset_name [COLLATE collation_name]]

ALTER TABLE tbl_name

[DEFAULT CHARACTER SET charset_name] [COLLATE collation_name]

例子:

CREATE TABLE t1 ( ... )

DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

MySQL 通过下面的方法选择表字符集和collation:

·如果 CHARACTER SET X 和 COLLATE Y 都被指定了, 那么字符集就是 X collation 是Y

·如果只指定了CHARACTER SET X 而没有指定 COLLATE, 那么字符集为 X 并配默认的

collation.

·否则就使用数据库字符集和 collation.

表字符集和 collation 用来在没有指定个别列字符集和列collation的时候做为它们

的默认值。表字符集和 collation 是MySQL 的扩展;在标准SQL里没有这种东西

10.3.4 列字符集和 Collation

每个``character'' 列(是指列属性为CHAR, VARCHAR, 或 TEXT的)都有一个列字符集

和一个列collation,不能为空。列定义语句有可选子句指定列字符集和collation:

col_name {CHAR | VARCHAR | TEXT} (col_length)

[CHARACTER SET charset_name [COLLATE collation_name]]

Example:

CREATE TABLE Table1

(

column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci

);

MySQL 这样选择列字符集和collation:

·如果 CHARACTER SET X 和 COLLATE Y 都被指定了, 那么字符集就是 X collation 就是 Y.

·如果指定了 CHARACTER SET X 但没有指定 COLLATE, 那么字符集是 X 并配默认的collation.

·否则,就用表字符集和 collation.

CHARACTER SET 和 COLLATE 子句是标准SQL.

10.3.5 字符集和 Collation 分配的例子

下面的例子显示了 MySQL 怎样决定默认的字符集和collation的值:

例子1:表+列定义

CREATE TABLE t1

(

c1 CHAR(10) CHARACTER SET latin1 COLLATE latin1_german1_ci

) DEFAULT CHARACTER SET latin2 COLLATE latin2_bin;

这里我们有一个用latin1的字符集和latin1_german1_ci collation的列。

定义非常明显,所以很简单。注意把一个latin1 的列存到一个latin2的表里不会有问题

例子2:表+列定义

CREATE TABLE t1

(

c1 CHAR(10) CHARACTER SET latin1

) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

这次我们有一列是latin1字符集加默认的collation。现在,虽然它看上去很自然,

但是默认的collation却不是从表级继承而来。事实上,因为latin1的默认collation

始终是latin1_swedish_ci,所以c1列的collation是latin1_swedish_ci (而不是

latin1_danish_ci).

例子3:表+列定义

CREATE TABLE t1

(

c1 CHAR(10)

) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

我们有一个默认字符集和默认collation的列。在这个环境下,MySQL向上到表级决定

列字符集和collation。所以,c1的列字符集是latin1,它的collation是

latin1_danish_ci

例子4:数据库+表+列定义

CREATE DATABASE d1

DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;

USE d1;

CREATE TABLE t1

(

c1 CHAR(10)

);

我们创建了一个没有指定列字符集和collation的列。我们也没有指定表级字符集和

collation。在这个条件下,MySQL向上到数据库级决定。(数据库的设置变为表的设置,

之后成为列的设置),所以c1的列字符集是latin2,collation是latin2_czech_ci

10.3.6 连接的字符集和Collations

一些字符集和collation和用户对服务器的作用结合。有些在前面已经提及了:

·服务器的字符集和collation和 character_set_server 及 collation_server 变量

的值一样

·默认数据库的字符集和collation和 character_set_database 及 collation_database

变量的值一样.

附加的字符集和collation 变量被引入用来处理服务器和客户端之间连接得通信。每个

客户端都有连接相关的字符集和collation变量。

想想“连接”是什么:是你连到服务器时作的事情。客户端通过这条连接发送SQL语句,

比如查询,服务器则通过这条连接给客户端送回回应,比如查询结果结果集合,这导致

了客户端处理字符集和collation的一些问题,它们每个都可以按照系统变量来回答:

·当查询离开客户端的时候应该是什么字符集的?服务器用character_set_client

这个变量来作为客户端发送查询所用的字符集

·服务器端在接收到了查询以后应该把它翻译到社么字符集里?对于这个,服务程序

用的是character_set_connection 和 collation_connection 这两个变量。

它把客户端送来的查询从character_set_client 转换成character_set_connection

(除了latin1或者utf8 的字符串)。collation_connection 对于比较字符串非常

重要,对于列值比较字符串是没有关系的,因为列拥有高优先级

·当服务程序要送回结果集合或者错误信息给客户端时应该用什么字符集?

character_set_results 变量指示了这个值,这包括了列值,或者列名等结果数据。

你可以调整这些变量的值,或者就使用默认的(那样就可以省略这节了)

有两个语句影响连接字符集设置:

SET NAMES 'charset_name'

SET CHARACTER SET charset_name

SET NAMES 指出客户端送出的SQL语句里是什么。因此,SET NAMES 'cp1251' 就告诉服务

程序“下面将要从这个客户端送来的信息将是使用'cp1251'这个字符集。这也指定了

服务程序送回的结果所用的字符集,(例如如果你用了一个SELECT语句它会指出列值

拥有的字符集)

SET NAMES 'x' 语句相当于下面三个语句:

mysql> SET character_set_client = x;

mysql> SET character_set_results = x;

mysql> SET character_set_connection = x;

把character_set_connection 设置成x也会把collation_connection 设置成默认

collation x

SET CHARACTER SET 是类似的,不过是把连接字符集和collation设置成那些默认数据库。

SET CHARACTER SET x 语句相当于这三个语句:

mysql> SET character_set_client = x;

mysql> SET character_set_results = x;

mysql> SET collation_connection = @@collation_database;

当一个客户连接,它向服务程序发送它想使用的字符集的名字,服务程序把

character_set_client, character_set_results, 和 character_set_connection

这些变量设置成那个字符集(事实上,服务程序使用字符集执行了SET NAMES 操作)

如果你不想用默认字符集,使用 Mysql 客户端程序不需要每次启动时执行SET NAMES 。

你可以在mysql 执行语句行加上--default-character-set 这个选项,或者在你的选项

文件里加上。比如,下面的选项文件设置使你每次执行mysql程序时把默认字符集变量

改成 koi8r:

[mysql]

default-character-set=koi8r

例如:假设column1定义是 CHAR(5) CHARACTER SET latin2。如果你不用SET NAMES

或者 SET CHARACTER SET,那么对于你的 SELECT column1 FROM t 请求,服务程序

会把column1 的所有值用连接建立时客户端指定的字符集来回送。另一方面,如果你

用了 SET NAMES 'latin1' or SET CHARACTER SET latin1 ,那么在送回结果之前,

服务程序会把 latin2 的值转成latin1,如果里面有两种字符集里都没有的字符,

转化会有损耗。

如果你不希望服务程序作任何转换,就把character_set_results 设置成 NULL

mysql> SET character_set_results = NULL;

10.3.7. 字符串文字字符集和collation

每个字符串文字都有自己的字符集和collation,不能为空

一个字符串文字可能有一个可选字符集introducer和COLLATION子句:

[_charset_name]'string' [COLLATE collation_name]

例如:

SELECT 'string';

SELECT _latin1'string';

SELECT _latin1'string' COLLATE latin1_danish_ci;

对于简单语句 SELECT 'string',字符串的字符集和collation是由两个系统变量

character_set_connection 和 collation_connection 定义的。

_charset_name 表达式正式情况下被叫做 introducer .它告诉分析器“下面的字符串

是使用 X 字符集的。”因为这在以前造成很多人的困扰,我们强调一下introducer

并不作任何转换,严格来讲并不改变字符串的值,只是一个符号。introducer 在

标准16进制文字前和数字16进制记法前都是合法的(x'literal' 和 0xnnnn),

在?前面也是合法的(当在程序设计语言接口里使用预备语句时作参数替换)

例如:

SELECT _latin1 x'AABBCC';

SELECT _latin1 0xAABBCC;

SELECT _latin1 ?;

MySQL 这样决定一个文字的字符集和collation:

·如果 _X 和 COLLATE Y 都被指定了,那么字符集就是 X collation 是 Y

·如果 指定了 _X 而没有指定 COLLATE ,那么字符集是 X collation 是 X 的默认

collation

·否则,由系统变量 character_set_connection 和 collation_connection 决定字符集

和collation

例如:

·一个字符集是 latin1 而collation是 latin1_german1_ci 的字符串:

SELECT _latin1'Müller' COLLATE latin1_german1_ci;

·一个字符集是 latin1 以及其配套默认collation的(latin1_swedish_ci)字符串:

SELECT _latin1'Müller';

·一个连接默认字符集和collation的字符串:

SELECT 'Müller';

字符集 introducer 和 COLLATE 子句是符合标准 SQL 规则的工具

10.3.8. 在 SQL 语句里使用 COLLATE

通过 COLLATE 子句,你可以在比较时覆盖替换掉任何默认collation, COLLATE 可以用

在SQL 语句的很多部分里,这里是一些例子:

·在 ORDER BY 里:

SELECT k

FROM t1

ORDER BY k COLLATE latin1_german2_ci;

·在 AS 里:

SELECT k COLLATE latin1_german2_ci AS k1

FROM t1

ORDER BY k1;

·在GROUP BY里 :

SELECT k

FROM t1

GROUP BY k COLLATE latin1_german2_ci;

·在集合函数里:

SELECT MAX(k COLLATE latin1_german2_ci)

FROM t1;

·在DISTINCT里

SELECT DISTINCT k COLLATE latin1_german2_ci

FROM t1;

·在WHERE 里:

SELECT *

FROM t1

WHERE _latin1 'Müller' COLLATE latin1_german2_ci = k;

·在HAVING里:

SELECT k

FROM t1

GROUP BY k

HAVING k = _latin1 'Müller' COLLATE latin1_german2_ci;

User Comments

Posted by [name withheld] on January 14 2005 2:33pm

在不同的列/表里:

SELECT t1.k FROM t1 WHERE NOT EXISTS

( SELECT * FROM t2 WHERE t1.k=t2.k COLLATE latin1_german2_ci);

在collation 之间比较列的时候能够避免出错信息。

10.3.9. COLLATE 子句优先级

COLLATE子句具有高优先级(比||高),所以下面两个表达式是相同的:

x || y COLLATE z

x || (y COLLATE z)

10.3.10. BINARY 运算

BINARY 运算是COLLATE 子句的速记法,BINARY 'x' 和 'x' COLLATE y 是相同的,

y 是字符集 'x' 的二元collation 的名字。每个字符集都有二元 collation。例如,

latin1 字符集的 collation 是latin1_bin,所以如果列 a 是latin1 字符集,下面

两个语句有同样效果:

SELECT * FROM t1 ORDER BY BINARY a;

SELECT * FROM t1 ORDER BY a COLLATE latin1_bin;

10.3.11. 一些决定collation 比较棘手的情况

在绝大多数查询里,MySQL 用什么collation来进行比较操作都是很显而易见的,例如,

在下面的情况里,很显然collation 应该是“列 x 的列 collation”:

SELECT x FROM T ORDER BY x;

SELECT x FROM T WHERE x = x;

SELECT DISTINCT x FROM T;

但是,当卷入了多操作数时,就很难搞了,例如:

SELECT x FROM T WHERE x = 'Y';

这个查询应该使用列 x 的collation 呢,还是使用字符串'Y' 的?

标准SQL 使用被叫做``coercibility'' 的规则来解决这个问题。本质就是:因为

x 和 'Y' 都有collation ,优先使用谁的collation呢?这很复杂,不过下面的规则能

应付大多数情况:

·一个COLLATE 子句的 coercibility 是0 (也就是根本不coercible)

·两个具有不同collation 的字符串连结的 coercibility 是1

·一个列的 collation 的 coercibility 是 2

·一个文字型的collation 的 coercibility 是3。

那些规则这样解决含混:

·使用具有最低 coercibility 值的collation

·如果两边具有相同的 coercibility, 如果两个collation 不同那就是错误。

例如:

column1 = 'A' 使用column1的collation

column1 = 'A' COLLATE x 使用 'A' 的collation

column1 COLLATE x = 'A' COLLATE y Error

COERCIBILITY() 函数可以用来判断一个字符串表达式的coercibility:

mysql> SELECT COERCIBILITY('A' COLLATE latin1_swedish_ci);

-> 0

mysql> SELECT COERCIBILITY('A');

-> 3

User Comments

Posted by Thierry Danard on November 5 2004 10:34pm

对于数据库引擎来说显而易见的排序并不是总那么显而易见(version 4.1).

一个没有带类似于"select concat(mycolumn, '%') from mytable "这样的排序指令

的查询在"mycolumn" 和"%"的字符集不相同的情况下不会工作。

在我这里,整个数据库使用 UTF-8, 默认情况下, '%' 假设是 latin1,

causing an error to be triggered。

10.3.12. Collations Must Be for the Right Character Set

记得说过每个字符集都有一个或者多个collation,每个collation只和一个字符集关联。

因此,下面的语句会导致错误,因为 latin2_bin 这个collation 和 latin1 这个字符集

不配套。

mysql> SELECT _latin1 'x' COLLATE latin2_bin;

ERROR 1251: COLLATION 'latin2_bin' is not valid

for CHARACTER SET 'latin1'

在某些情况下,在 MySQL 4.1 前工作的表达式会在MySQL 4.1以后的版本失败,

如果你在帐号里没有字符集和collation的话。例如,在 MySQL 4.1 前,这个语句

会这样工作:

mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);

+-------------------------------+

| SUBSTRING_INDEX(USER(),'@',1) |

+-------------------------------+

| root |

+-------------------------------+

升级到MySQL 4.1 以后,语句失效:

mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);

ERROR 1267 (HY000): Illegal mix of collations

(utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE)

for operation 'substr_index'

发生这个的原因是username 使用utf8存储(参看10.6节),因此, USER() 函数

和文字型字符串'@'具有不同的字符集(当然也是不同collation):

mysql> SELECT COLLATION(USER()), COLLATION('@');

+-------------------+-------------------+

| COLLATION(USER()) | COLLATION('@') |

+-------------------+-------------------+

| utf8_general_ci | latin1_swedish_ci |

+-------------------+-------------------+

解决的一个方法是告诉MySQL把文字型字符串翻译成utf8:

mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1);

+------------------------------------+

| SUBSTRING_INDEX(USER(),_utf8'@',1) |

+------------------------------------+

| root |

+------------------------------------+

另一个方法是把连接的字符集和collation改成utf8,你可以使用SET NAMES 'utf8'

或者直接设置两个系统变量character_set_connection 和 collation_connection

的值来达到这个目的。

10.3.13. Collation 的效果的一个例子

假设表 T 里的列 X 具有这些 latin1 的列值:

Muffler

Müller

MX Systems

MySQL

并且假设这些列值可以用下列语句找回:

SELECT X FROM T ORDER BY X COLLATE collation_name;

在这张表中列出了不同collation 的结果值的结果排序

latin1_swedish_ci latin1_german1_ci latin1_german2_ci

Muffler Muffler Müller

MX Systems Müller Muffler

Müller MX Systems MX Systems

MySQL MySQL MySQL

这张表显示了如果我们在一个 ORDER BY 子句里使用不同collation 会有什么样的效果

的例子,导致这种不同排序结果的字符是上面有两个点的 U,在德语里叫做U-曲音,

不过我们叫做U-分音符

·第一列显示了使用瑞典/芬兰 collation 规则的 SELECT 的结果,U-分音符

通过Y归类

·第二列显示了使用德语DIN-1 规则的SELECT 语句的结果,U-分音符通过U归类

·第三列显示了使用德语DIN-2 规则的SELECT 语句的结果,U-分音符通过UE归类

三种不同的collation ,三种不同的结果,这是MySQL 在这里的处理。通过使用合适的

collation,你可以选择你想要的排序次序。

该文章转载自宋氏电脑 技术无忧:http://www.pc51.org/data/MySQL/2007-01-04/2600.html

mysql collation utf8_mysql数据库 表字段 的collation utf8_unicode_ci相关推荐

  1. mysql数据库表字段使用DESC等关键字报错及解决方法

    mysql数据库表字段使用DESC等关键字报错及解决方法 参考文章: (1)mysql数据库表字段使用DESC等关键字报错及解决方法 (2)https://www.cnblogs.com/li--xi ...

  2. mysql字段命名_Mysql 01—数据库表字段的命名规则

    摘要:当前测试工作为自研数据库测试,同时需要为自动化执行处理入库数据表,为让自己看起来专业些,特查找资料学习数据库的各种规范使用. 本文是一篇包含了数据库命名.数据库表命名.数据库表字段命名及SQL语 ...

  3. 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题

    关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题 参考文章: (1)关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的 ...

  4. MyBatisPLus3.x中代码生成器自定义数据库表字段类型转换

    场景 MyBatisPlus3.x中使用代码生成器(全注释): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89518466 数 ...

  5. excel表格数据库表字段带下划线转驼峰

    数据库表字段(小写字母带下划线)转驼峰字段,excel表格,可使用公式: LEFT(A2,1)&MID(SUBSTITUTE(PROPER(A2),"_","&q ...

  6. 修改数据库表字段报错:1265-data truncated for column

    修改数据库表字段类型,保存报错:1265-data truncated for column 场景:表A的主键最开始是varchar类型,后来想要改成主键自增的,但是改成int类型,且设置为自增后,保 ...

  7. Java数据库行列级数据权限控制_关于数据库表字段的数据权限设计

    吐槽:刚在同事的帮忙下,把maven工程成功导入到eclipse,期间遇到的最大问题就是安装eclipse插件,花费了其中大部分的时间 现在做的研发产品,遇到的一个新的需求是"控制外部系统对 ...

  8. SAP动态下载数据库表字段及文本至EXCEL程序

    闲来无事,写了个小程序给业务顾问用 功能有两个: 1.输入数据库表名称,点击下载模板,将数据库表字段和文本描述用OLE输出至EXCEL: 2.输入表名,将刚刚填充完数据的EXCEL模板选择,执行后将模 ...

  9. SQLite数据库表字段修改与删除

    SQLite数据库表字段修改与删除 sinat_36572506 2016-11-01 13:41:25   7554   收藏 展开 我创建一张表,但是在使用过程中发现字段名称会发生改变,但是SQL ...

最新文章

  1. IOS8中SWIFT 弹出框的显示
  2. c# 多线程多个参数
  3. android如何不自动获取焦点,Android 如何让EditText不自动获取焦点
  4. L3-004. 肿瘤诊断-PAT团体程序设计天梯赛GPLT(广度优先搜索)
  5. mysql 变量 视图_MySQL – 无法使用SET变量创建视图
  6. 普通用户使用docker命令
  7. Cisco Packet Tracer思科模拟器单臂路由的配置
  8. 万能解压器安卓版_解压zip app下载-解压zip(手机解压缩软件)下载11.5.4 安卓版-西西软件下载...
  9. 定投复利公式 php,基金定投收益计算公式和复利计算公式
  10. 中国国产十大著名户外运动品牌全球最顶级碳纤维自行车品牌排行榜
  11. 愤怒的小鸟 高清完整版下载
  12. 经营三类医疗器械不使用计算机,三类医疗器械计算机管理系统要求
  13. python人脸识别opencv_python中使用Opencv进行人脸识别
  14. 使用ssh对服务器进行登录
  15. 除了Kaggle,这里还有一些高质量的数据科学竞赛平台
  16. 2019中国开源年会总结
  17. Xampp远程连接其他数据库
  18. XMReport-标签设计打印神器
  19. 聊聊METROIDVANIA
  20. 【调剂】东北石油大学电气信息工程学院招收控制、电气、通信、计算机等专业调剂研究生...

热门文章

  1. Python--format()学习记录
  2. 写给开发向产品转型的同学的3句话
  3. java的main函数为什么是public static void main(String[] args)
  4. 【极客blog图文讲解】ruby以及Jekyll的环境配置(针对mac linux)
  5. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载
  6. FastJSON应用前测试--转载
  7. java 类加载过程
  8. linux下logrotate配置和理解---转
  9. ios 标准 #pragma mark的用法
  10. Lesson 12.4 逻辑回归建模实验