查看数据库sqlite查看数据库字符集mobcac的技术博客

字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。让我们使用一个假想字符集的例子来区别清楚。

假设我们有一个字母表使用了四个字母:‘A’、‘B’、‘a’、‘b’。我们为每个字母赋予一个数值:‘A’=0,‘B’= 1,‘a’= 2,‘b’= 3。字母‘A’是一个符号,数字0是‘A’的编码,这四个字母和它们的编码组合在一起是一个字符集。

假设我们希望比较两个字符串的值:‘A’和‘B’。比较的最简单的方法是查找编码:‘A’为0,‘B’为1。因为0 小于1,我们可以说‘A’小于‘B’。我们做的仅仅是在我们的字符集上应用了一个 校对规则。校对规则是一套规则(在这种情况下仅仅是一套规则):“对编码进行比较。”我们称这种全部可能的规则中的最简单的 校对规则为一个binary(二元)校对规则。

但是,如果我们希望小写字母和大写字母是等价的,应该怎样?那么,我们将至少有两个规则:(1)把小写字母‘a’和‘b’视为与‘A’和‘B’等价;(2)然后比较编码。我们称这是一个大小写不敏感的 校对规则。比二元校对规则复杂一些。

在实际生活中,大多数字符集有许多字符:不仅仅是‘A’和‘B’,而是整个字母表,有时候有许多种字母表,或者一个东方的使用上千个字符的书写系统,还有许多特殊符号和标点符号。并且在实际生活中,大多数 校对规则有许多个规则:不仅仅是大小写不敏感,还包括重音符不敏感(“重音符” 是附属于一个字母的符号,象德语的‘Ö’符号)和多字节映射(例如,作为规则‘Ö’=‘OE’就是两个德语 校对规则的一种)。

MySQL5.1能够做这些事情:

·         使用多种字符集来存储字符串

·         使用多种校对规则来比较字符串

·         在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合字符串

·         允许定义任何级别的字符集和校对规则

在这些方面,MySQL5.1不仅比MySQL4.1以前的版本灵活得多,而且比其它大多数数据库管理系统超前许多。但是,为了有效地使用这些功能,你需要了解哪些字符集和 校对规则是可用的,怎样改变默认值,以及它们怎样影响字符操作符和字符串函数的行为。

MySQL服务器能够支持多种字符集。可以使用SHOW CHARACTER SET语句列出可用的字符集:

mysql> SHOW CHARACTER SET;

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

| Charset  | Description                 | Default collation   | Maxlen |

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

| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |

| dec8     | DEC West European           | dec8_swedish_ci     |      1 |

| cp850    | DOS West European           | cp850_general_ci    |      1 |

| hp8      | HP West European            | hp8_english_ci      |      1 |

| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |

| latin1   | cp1252     West European    | latin1_swedish_ci   |      1 |

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

| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |

| ascii    | US ASCII                    | ascii_general_ci    |      1 |

| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |

| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |

| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |

| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |

| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |

| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |

| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |

| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |

| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |

| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |

| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |

...

任何一个给定的字符集至少有一个校对规则。它可能有几个校对规则。

要想列出一个字符集的校对规则,使用SHOW COLLATION语句。例如,要想查看latin1(“西欧ISO-8859-1”)字符集的 校对规则,使用下面的语句查找那些名字以latin1开头的 校对规则:

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校对规则有下面的含义:

校对规则

含义

latin1_german1_ci

德国DIN-1

latin1_swedish_ci

瑞典/芬兰

latin1_danish_ci

丹麦/挪威

latin1_german2_ci

德国 DIN-2

latin1_bin

符合latin1编码的二进制

latin1_general_ci

多种语言(西欧)

latin1_general_cs

多种语言(西欧ISO),大小写敏感

latin1_spanish_ci

现代西班牙

校对规则一般有这些特征:

·         两个不同的字符集不能有相同的校对规则。

·         每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。

MySQL按照如下方法确定服务器字符集和服务器校对规则:

·         当服务器启动时根据有效的选项设置

·         根据运行时的设定值

在服务器级别,确定方法很简单。当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。可以使用--default-character-set设置字符集,并且可以在字符集后面为 校对规则添加--default-collation。如果没有指定一个字符集,那就与--default-character-set=latin1相同。如果你仅指定了一个字符集(例如,latin1),但是没有指定一个 校对规则,那就与--default-charset=latin1 --default-collation=latin1_swedish_ci相同,因为latin1_swedish_ci是latin1的默认校对规则。因此,以下三个命令有相同的效果:

shell> mysqld

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

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

--default-collation=latin1_swedish_ci

更改设定值的一个方法是通过重新编译。如果希望在从源程序构建时更改默认服务器字符集和校对规则,使用:--with-charset和--with-collation作为configure的参量。例如:

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

或者:

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

--with-collation=latin1_german1_ci

mysqld和configure都验证字符集/校对规则组合是否有效。如果无效,每个程序都显示一个错误信息,然后终止。

当前的服务器字符集和校对规则可以用作character_set_server和collation_server系统变量的值。在运行时能够改变这些变量的值。

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这样选择数据库字符集和数据库校对规则:

·         如果指定了CHARACTER SET X和COLLATE Y,那么采用字符集X和校对规则Y。

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。

·         否则,采用服务器字符集和服务器校对规则。

MySQL的CREATE DATABASE ... DEFAULT CHARACTER SET ...语法与标准SQL的CREATE SCHEMA ... CHARACTER SET ...语法类似。因此,可以在同一个MySQL服务器上创建使用不同字符集和 校对规则的数据库。

如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。它们没有其它目的。

默认数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量。无论何时默认数据库更改了,服务器都设置这两个变量的值。如果没有 默认数据库,这两个变量与相应的服务器级别的变量(character_set_server和collation_server)具有相同的值。

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按照下面的方式选择表字符集和 校对规则:

·         如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。

·         否则,采用服务器字符集和服务器校对规则。

如果在列定义中没有指定列字符集和校对规则,则默认使用表字符集和校对规则。表字符集和校对规则是MySQL的扩展;在标准SQL中没有。

字符”列(即,CHAR、VARCHAR或TEXT类型的列)有一个列字符集和一个列 校对规则,它不能为空。列定义语法有一个可选子句来指定列字符集和校对规则:

col_name {CHAR | VARCHAR | TEXT} (col_length)

[CHARACTER SET charset_name [COLLATE collation_name]]

例如:

CREATE TABLE Table1

column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci

);

MySQL按照下面的方式选择列字符集和校对规则:

·         如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。

·         否则,采用表字符集和服务器校对规则。

CHARACTER SET和COLLATE子句是标准的SQL。

以下例子显示了MySQL怎样确定默认字符集和校对规则。

示例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校对规则。是显式的定义,因此简单明了。需要注意的是,在一个latin2表中存储一个latin1列不会存在问题。

示例2:表和列定义

CREATE TABLE t1

c1 CHAR(10) CHARACTER SET latin1

) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

这次我们有一个列使用latin1字符集和一个默认校对规则。尽管它显得自然,默认校对规则却不是表级。相反,因为latin1的默认校对规则总是latin1_swedish_ci,列c1有一个校对规则latin1_swedish_ci(而不是latin1_danish_ci)。

示例3:表和列定义

CREATE TABLE t1

c1 CHAR(10)

) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

我们有一个列使用一个默认字符集和一个默认校对规则。在这种情况下,MySQL查找表级别来确定列字符集和 校对规则。因此,列c1的字符集是latin1,它的 校对规则是latin1_danish_ci。

示例4:数据库、表和列定义

CREATE DATABASE d1

DEFAULT CHARACTER SET latin2 COLLATE latin2_czech_ci;

USE d1;

CREATE TABLE t1

c1 CHAR(10)

);

我们创建了一个没有指定字符集和校对规则的列。我们也没有指定表级字符集和校对规则。在这种情况下,MySQL查找数据库级的相关设置。(数据库的设置变为表的设置,其后变为列的设置。)因此,列c1的字符集为是latin2,它的 校对规则是latin2_czech_ci。

·         服务器字符集和校对规则可以用作character_set_server和collation_server变量的值。

·         默认数据库的字符集和校对规则可以用作character_set_database和collation_database变量的值。

考虑什么是一个“连接”:它是连接服务器时所作的事情。客户端发送SQL语句,例如查询,通过连接发送到服务器。服务器通过连接发送响应给客户端,例如结果集。对于客户端连接,这样会导致一些关于连接的字符集和 校对规则的问题,这些问题均能够通过系统变量来解决:

·         当查询离开客户端后,在查询中使用哪种字符集?

服务器使用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;

将x设置为character_set_connection也就设置了collation_connection是x的默认校对规则。

SET CHARACTER SET语句是类似的,但是为 默认数据库设置连接字符集和校对规则。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'或SET CHARACTER SET latin1,那么发送结果之前,服务器转换latin2值到latin1。转换可能会丢失那些不属于两种字符集的字符。

如果不希望服务器执行任何转换,设置character_set_results为NULL:

mysql> SET character_set_results = NULL;

一个字符串文字可能有一个可选的字符集引介词和COLLATE子句:

[_charset_name]'string' [COLLATE collation_name]

例如:

SELECT 'string';

SELECT _latin1'string';

SELECT _latin1'string' COLLATE latin1_danish_ci;

对于简单的语句SELECT 'string',字符串使用由character_set_connection和collation_connection系统变量定义的字符集和 校对规则。

_charset_name表达式正式称做一个引介词。它告诉解析程序,“后面将要出现的字符串使用字符集X。”因为以前人们对此感到困惑,我们强调引介词不导致任何转换; 它仅是一个符号,不改变字符串的值。引介词在标准十六进制字母和数字十六进制符号(x'literal'和 0xnnnn)中是合法的,以及?(当在一个编程语言接口中使用预处理的语句时进行参数替换)。

例如:

SELECT _latin1 x'AABBCC';

SELECT _latin1 0xAABBCC;

SELECT _latin1 ?;

MySQL这样确定一个文字字符集和校对规则:

·         如果指定了CHARACTER SET X和COLLATE Y,那么使用CHARACTER SET X和COLLATE Y。

·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么使用CHARACTER SET X和CHARACTER SET X的默认校对规则。

·         否则,使用通过character_set_connection 和 collation_connection系统变量给出的字符集和 校对规则。

例如:

·         使用latin1字符集和latin1_german1_ci校对规则的字符串:

·                SELECT _latin1'Müller' COLLATE latin1_german1_ci;

·         使用latin1字符集和其默认校对规则的字符串(即,latin1_swedish_ci):

·                SELECT _latin1'Müller';

·         使用连接默认字符集和校对规则的字符串:

·                SELECT 'Müller';

字符集引介词和COLLATE子句是根据标准SQL规范实现的。

COLLATE子句有较高的优先级(高于||),因此下面两个表达式是等价的:

x || y COLLATE z

x || (y COLLATE z)

BINARY操作符是COLLATE子句的一个速记符。BINARY'x'等价与'x' COLLATE y,这里y是字符集'x'二元 校对规则的名字。每一个字符集有一个二元校对规则。例如,latin1字符集的二元 校对规则是latin1_bin,因此,如果列a是字符集latin1,以下两个语句有相同效果:

SELECT * FROM t1 ORDER BY BINARY a;

SELECT * FROM t1 ORDER BY a COLLATE latin1_bin;

在绝大多数查询中,MySQL使用哪种校对规则进行比较是很显然的。例如,在下列情况中,校对规则明显的是“列x的列校对规则”:

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的 校对规则,还是字符串文字'Y'的 校对规则?

标准化SQL使用“可压缩性”规则解决这种问题。基本上,这个意思是:既然x和'Y'都有 校对规则,哪个校对规则优先?这可能比较难解决,但是以下规则适合大多数情况:

·         一个外在的COLLATE子句可压缩性是0(根本不能压缩。)

·         使用不同校对规则的两个字符串连接的可压缩性是1。

·         列校对规则的可压缩性是2。

·         “系统常数”(如USER()或VERSION()函数返回的字符串)可压缩性是3。

·         文字规则的可压缩性是4。

·         NULL或从NULL派生的表达式的可压缩性是 5。

上述可压缩性值是MySQL5.1当前所用的。

这样上述规则可以模糊解决:

·         使用最低的可压缩性值的校对规则。

·         如果两侧有相同的可压缩性,那么如果校对规则不同则发生错误。

例如:

column1 = 'A'

使用column1的校对规则

column1 = 'A' COLLATE x

使用'A'的校对规则

column1 COLLATE x = 'A' COLLATE y

错误

使用COERCIBILITY()函数确定一个字符串表达式的可压缩性:

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

-> 0

mysql> SELECT COERCIBILITY(VERSION());

-> 3

mysql> SELECT COERCIBILITY('A');

-> 4

没有系统常数或可忽略的压缩性。函数如USER()的可压缩性是2而不是3,文字的可压缩性是3而不是4。

请注意每个字符集有一个或多个校对规则,并且每个校对规则只能属于一个字符集。因此,以下语句会产生一个错误信息,因为校对规则latin2_bin对于字符集latin1非法:

mysql> SELECT _latin1 'x' COLLATE latin2_bin;

ERROR 1251: COLLATION 'latin2_bin' is not valid

for CHARACTER SET 'latin1'

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

Muffler

Müller

MX Systems

MySQL

假设使用下面的语句获取列值:

SELECT X FROM T ORDER BY X COLLATE collation_name;

使用不同校对规则的列值结果排序见下表:

latin1_swedish_ci

latin1_german1_ci

latin1_german2_ci

Muffler

Muffler

Müller

MX系统

Müller

Muffler

Müller

MX系统

MX系统

MySQL

MySQL

MySQL

本表显示了我们在ORDER BY字句中使用不同所校对规则的效果的示例。在本例中导致不同排序的字符是上面带有两个圆点的U(ü),它在德语中发音为"U-umlaut"。

·         第一列显示的是使用瑞典/芬兰校对规则的SELECT语句的结果,它被称作U-umlaut使用Y排序。

·         第二列显示的是使用德语DIN-1校对规则的SELECT语句的结果,它被称作U-umlaut使用U排序。

·         第三列显示的是使用德语DIN-2校对规则的SELECT语句的结果,它被称作U-umlaut使用UE排序。

对于简单的函数,即接收字符串输入然后返回一个字符串结果作为输出的函数,输出的字符集和校对规则与原始输入的相同。例如,UPPER(X)返回一个字符串,其字符和 校对规则与X相同。类似的函数还有INSTR()、LCASE()、LOWER()、LTRIM()、MID()、REPEAT()、REPLACE()、REVERSE()、RIGHT()、RPAD()、RTRIM()、SOUNDEX()、SUBSTRING()、TRIM()、UCASE()和UPPER()。(还需要注意:REPLACE()函数不同于其它函数,它总是忽略输入字符串的 校对规则,并且进行大小写不敏感的比较。)

对于合并多个字符串输入并且返回单个字符串输出的运算,应用标准SQL“聚合规则”:

·         如果存在显式的校对规则X,那么使用X。

·         如果存在显式的校对规则X和Y,那么产生一个错误。

·         否则,如果全部校对规则是X,那么使用X。

·         其它情况,结果没有校对规则。

例如,使用CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END。结果校对规则是X。对于CASE、UNION、||、CONCAT()、ELT()、GREATEST()、IF()和LEAST()情况相同。

对于转换为字符数据的运算,从运算得到的结果字符串的字符集和校对规则由character_set_connection和collation_connection系统变量定义。这适用于CAST()、CHAR()、CONV()、FORMAT()、HEX()和SPACE()函数。

CONVERT(expr USING transcoding_name)

在 MySQL中,转换代码名与相应的字符集名相同。

例子:

SELECT CONVERT(_latin1'Müller' USING utf8);

INSERT INTO utf8table (utf8column)

SELECT CONVERT(latin1field USING utf8) FROM latin1table;

CONVERT(... USING ...)根据标准SQL规范实施。

在传统SQL模式中,如果你转换一个“0”日期字符串到日期类型,CONVERT()函数返回NULL。在MySQL5.1中还产生一条警告。

CAST(character_string AS character_data_type CHARACTER SET charset_name)

例如:

SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);

如果使用CAST()时没有指定CHARACTER SET,结果字符集和校对规则通过character_set_connection 和 collation_connection系统变量定义。如果用CAST()并带有CHARACTER SET X选项,那么结果字符集和校对规则是X和其 默认的校对规则。

你可能不能在CAST()中使用COLLATE子句,但是你可以在外部使用它。也就是说,不是CAST(... COLLATE ...),而是CAST(...) COLLATE ...。

例如:

SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

在传统SQL模式中,如果你转换一个“0”日期字符串到日期类型,CAST()函数返回NULL。在MySQL5.1中还产生一条警告。

一些SHOW语句提供额外的字符集信息。这些语句包括SHOW CHARACTER SET、SHOW COLLATION、SHOW CREATE DATABASE、SHOW CREATE TABLE和SHOW COLUMNS。

SHOW CHARACTER SET命令显示全部可用的字符集。它带有一个可选的LIKE子句来指示匹配哪些字符集名。例如:

mysql> SHOW CHARACTER SET LIKE 'latin%';

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

| Charset | Description                 | Default collation | Maxlen |

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

| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |

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

| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |

| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |

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

SHOW COLLATION语句的输出包括全部可用的字符集。它带有一个可选的LIKE子句来指示匹配哪些 校对规则名。例如:

mysql> SHOW COLLATION LIKE 'latin1%';

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

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

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

| latin1_german1_ci | latin1  |  5 |         |          |       0 |

| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       0 |

| latin1_danish_ci  | latin1  | 15 |         |          |       0 |

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

| latin1_bin        | latin1  | 47 |         | Yes      |       0 |

| latin1_general_ci | latin1  | 48 |         |          |       0 |

| latin1_general_cs | latin1  | 49 |         |          |       0 |

| latin1_spanish_ci | latin1  | 94 |         |          |       0 |

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

mysql> SHOW CREATE DATABASE test;

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

| Database | Create Database                                                 |

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

| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |

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

SHOW CREATE TABLE与SHOW CREATE DATABASE相似,但是显示创建给定数据库的CREATE TABLE语句。列定义显示任何字符集规格,并且表选项包括字符集信息。

当以SHOW FULL COLUMNS调用时,SHOW COLUMNS语句显示表中列的校对规则。具有CHAR、VARCHAR或TEXT数据类型的列有非NULL的 校对规则。数值列和其它非字符类型的列有NULL校对规则。例如:

mysql> SHOW FULL COLUMNS FROM person\G

*************************** 1. row ***************************

Field: id

Type: smallint(5) unsigned

Collation: NULL

Null: NO

Key: PRI

Default: NULL

Extra: auto_increment

Privileges: select,insert,update,references

Comment:

*************************** 2. row ***************************

Field: name

Type: char(60)

Collation: latin1_swedish_ci

Null: NO

Key:

Default:

Extra:

Privileges: select,insert,update,references

Comment:

字符集不是显示的部分。(字符集名隐含在校对规则名中。)

MySQL 5.1支持两种字符集以保存Unicode数据:

·         ucs2,UCS-2 Unicode字符集。

·         utf8,Unicode字符集的UTF8编码。

当前,UCS-2还不能够用作为客户端字符集,这意味着SET NAMES 'ucs2'不起作用。

UTF8字符集(转换Unicode表示)是存储Unicode数据的一种可选方法。它根据 RFC 3629执行。UTF8字符集的思想是不同Unicode字符采用变长字节序列编码:

·         基本拉丁字母、数字和标点符号使用一个字节。

·         大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言。

·         韩语、中文和日本象形文字使用三个字节序列。

RFC 3629说明了采用一到四个字节的编码序列。当前,MySQLUTF8不支持四个字节。(UTF8编码的旧标准是由RFC 2279给出,它描述了从一到六个字节的UTF8编码序列。RFC 3629补充了作废的RFC 2279;因此,不再使用5个字节和6个字节的编码序列。)

提示:使用UTF8时为了节省空间,使用VARCHAR而不要用CHAR。否则,MySQL必须为一个CHAR(10) CHARACTER SET utf8列预备30个字节,因为这是可能的最大长度。

元数据是“关于数据的数据”。描述数据库的任何数据—作为数据库内容的对立面—是元数据。因此,列名、数据库名、用户名、版本名以及从SHOW语句得到的结果中的大部分字符串是元数据。还包括INFORMATION_SCHEMA数据库中的表中的内容,因为定义的那些表存储关于数据库对象的信息。

元数据表述必须满足这些需求:

·         全部元数据必须在同一字符集内。否则,对INFORM一个TION_SCHEMA数据库中的表执行的SHOW命令和SELECT查询不能正常工作,因为这些运算结果中的同一列的不同行将会使用不同的字符集。

·         元数据必须包括所有语言的所有字符。否则,用户将不能够使用它们自己的语言来命名列和表。

为了满足这两个需求,MySQL使用Unicode字符集存储元数据,即UTF8。如果你从不使用重音字符,这不会导致任何破坏。但如果你使用重音字符,应该注意的是元数据是用UTF8存储。

这意味着,USER()、CURRENT_USER()、DATABASE()和VERSION()函数的返回值被 默认设置为UTF8字符集,这与同义函数如SESSION_USER() 和SYSTEM_USER()的结果相同。

服务器将character_set_system系统变量设置为元数据字符集的名:

mysql> SHOW VARIABLES LIKE 'character_set_system';

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

| Variable_name        | Value |

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

| character_set_system | utf8  |

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

存储元数据使用Unicode并不意味着列头和DESCRIBE函数的结果默认在character_set_system字符集中。当你使用SELECT column1 FROM t语句时,名字为column1的列从服务器返回客户端并使用由SET NAMES语句确定的字符集。更明确地说,使用的字符集是由character_set_results系统变量的值确定的。如果这个系统变量设置为NULL,不执行字符转换,服务器使用最初的字符集(字符集由character_set_system系统变量设置)返回元数据。

如果你正在一个语句中使用(例如)USER()函数进行比较或赋值,不要担心。MySQL为你执行一些原子转换。

SELECT * FROM Table1 WHERE USER() = latin1_column;

这是可以的,因为在比较之前latin1_column列的内容会自动转换到UTF8。

INSERT INTO Table1 (latin1_column) SELECT USER();

这是可以的,因为赋值之前USER()函数返回的内容自动转换为latin1。至今,自动转换没有全部实施,但是以后的版本中应该工作正常。

尽管自动转换不属于SQL标准,SQL标准化文档中说每一个字符集是(根据支持的字符)Unicode的“子集”。因此,一个知名的原则是,“适用超集的字符集能够应用于其子集”,我们相信Unicode的 校对规则能够应用于非Unicode字符串的比较。

对于MaxDB兼容性,下面两个语句是相同的:

CREATE TABLE t1 (f1 CHAR(n) UNICODE);CREATE TABLE t1 (f1 CHAR(n) CHARACTER SET ucs2);

CHAR(10) CHARACTER SET utf8

NATIONAL CHARACTER(10)

NCHAR(10)

下面同样:

VARCHAR(10) CHARACTER SET utf8

NATIONAL VARCHAR(10)

NCHAR VARCHAR(10)

NATIONAL CHARACTER VARYING(10)

NATIONAL CHAR VARYING(10)

你能够使用N'literal'来创建一个使用国家特有字符集的字符串。这两个语句是等价的:

SELECT N'some text';

SELECT _utf8'some text';

关于MySQL从4.1以前的版本到5.1版本字符集升级的信息,请参见MySQL4.1参考手册。

MySQL支持30多种字符集的70多种 校对规则。字符集和它们的默认校对规则可以通过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 | cp1252 West European | latin1_swedish_ci || latin2 | ISO 8859-2 Central European | latin2_general_ci || swe7 | 7bit Swedish | swe7_swedish_ci || ascii | US ASCII | ascii_general_ci || ujis | EUC-JP Japanese | ujis_japanese_ci || sjis | Shift-JIS Japanese | sjis_japanese_ci || hebrew | ISO 8859-8 Hebrew | hebrew_general_ci || tis620 | TIS620 Thai | tis620_thai_ci || euckr | EUC-KR Korean | euckr_korean_ci || koi8u | KOI8-U Ukrainian | koi8u_general_ci || gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci || greek | ISO 8859-7 Greek | greek_general_ci || cp1250 | Windows Central European | cp1250_general_ci || gbk | GBK Simplified Chinese | gbk_chinese_ci || latin5 | ISO 8859-9 Turkish | latin5_turkish_ci || armscii8 | ARMSCII-8 Armenian | armscii8_general_ci || utf8 | UTF-8 Unicode | utf8_general_ci || ucs2 | UCS-2 Unicode | ucs2_general_ci || cp866 | DOS Russian | cp866_general_ci || keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci || macce | Mac Central European | macce_general_ci || macroman | Mac West European | macroman_general_ci || cp852 | DOS Central European | cp852_general_ci || latin7 | ISO 8859-13 Baltic | latin7_general_ci || cp1251 | Windows Cyrillic | cp1251_general_ci || cp1256 | Windows Arabic | cp1256_general_ci || cp1257 | Windows Baltic | cp1257_general_ci || binary | Binary pseudo charset | binary || geostd8 | GEOSTD8 Georgian | geostd8_general_ci || cp932 | SJIS for Windows Japanese | cp932_japanese_ci || eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci |+----------+-----------------------------+---------------------+

MySQL有两种Unicode字符集。你能够使用这些字符集保存大约650种语言的文本。

·         ucs2 (UCS-2 Unicode)校对规则:

当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。

utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。

utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。

例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等:

Ä = A

Ö = O

Ü = U

两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:

ß = s

但是,对于utf8_unicode_ci下面等式成立:

ß = ss

对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

utf8_swedish_ci,与其它语言相关的utf8的校对规则相似,来源于utf8_unicode_ci,使用额外的语言规则。例如,在瑞典语中,以下的关系式成立,它在德语和法语中不成立:

Ü = Y < Ö

utf8_spanish_ci和utf8_spanish2_ci校对规则分别适用于现代和古典西班牙语。在两种 校对规则中,ñ’(n-发音符)是‘n’和‘o’之间的间隔字母。另外,对于古典西班牙语,‘ch’是‘c’和d之间的间隔字母,并且‘ll’是‘l’和‘m’之间的间隔字母。

西欧字符集覆盖大多数西欧语言,如法语、西班牙语、加泰罗尼亚语、巴斯克人语、葡萄牙语、意大利语、阿而巴尼亚语、荷兰语、德语、丹麦语、瑞典语、挪威语、芬兰语、法罗人语、冰岛语、爱尔兰语、苏格兰语和英语。

·         ascii(US ASCII)校对规则:

o        ascii_bin

o        ascii_general_ci( 默认)

·         cp850(DOS西欧) 校对规则:

o        cp850_bin

o        cp850_general_ci( 默认)

·         dec8(DEC 西欧)校对规则:

o        dec8_bin

o        dec8_swedish_ci( 默认)

·         hp8(HP 西欧)校对规则:

o        hp8_bin

o        hp8_english_ci( 默认)

·         latin1(cp1252 西欧)校对规则:

o        latin1_bin

o        latin1_danish_ci

o        latin1_general_ci

o        latin1_general_cs

o        latin1_german1_ci

o        latin1_german2_ci

o        latin1_spanish_ci

o        latin1_swedish_ci( 默认)

latin1是 默认字符集。latin1_swedish_ci是 默认的校对规则,它用于大多数MySQL客户。虽然经常说它以瑞典/芬兰 校对规则为基础,但瑞典和芬兰人不同意这种说法。

latin1_german1_ci和latin1_german2_ci校对规则基于DIN-1和DIN-2标准,这里DIN代表Deutsches Institut für Normung(德语等价于ANSI)。DIN-1被叫做“字典校对规则”,DIN-2被叫做“电话簿校对规则”。

o        latin1_german1_ci(字典)规则:

o                     Ä = a

o                     Ö = O

o                     Ü = U

o                     ß = s

o                     Ä = aE

o                     Ö = OE

o                     Ü = UE

o                     ß = ss

在 latin1_spanish_ci校对规则中,‘ñ’(n-tilde)是‘n’和‘o’之间的间隔字母。

·         macroma(Mac西欧) 校对规则:

o        macroman_bin

o        macroman_general_ci( 默认)

·         swe7(7位瑞典语) 校对规则:

o        swe7_bin

o        swe7_swedish_ci( 默认)

·         cp1250(Windows中欧) 校对规则:

o        cp1250_bin

o        cp1250_croatian_ci

o        cp1250_czech_cs

o        cp1250_general_ci( 默认)

·         cp852(DOS 中欧)校对规则:

o        cp852_bin

o        cp852_general_ci( 默认)

·         keybcs2(DOS Kamenicky Czech-Slovak)校对规则:

o        keybcs2_bin

o        keybcs2_general_ci( 默认)

·         latin2(ISO 8859-2 中欧)校对规则:

o        latin2_bin

o        latin2_croatian_ci

o        latin2_czech_cs

o        latin2_general_ci( 默认)

o        latin2_hungarian_ci

·         macce(Mac 中欧)校对规则:

o        macce_bin

o        macce_general_ci( 默认)

·         armscii8(ARMSCII-8 亚美尼亚语)校对规则:

o        armscii8_bin

o        armscii8_general_ci( 默认)

·         cp1256(阿拉伯语Windows) 校对规则:

o        cp1256_bin

o        cp1256_general_ci( 默认)

·         geostd8(GEOSTD8乔治亚语) 校对规则:

o        geostd8_bin

o        geostd8_general_ci( 默认)

·         greek(ISO 8859-7希腊语)校对规则:

o        greek_bin

o        greek_general_ci( 默认)

·         hebrew(ISO 8859-8希伯莱语)校对规则:

o        hebrew_bin

o        hebrew_general_ci( 默认)

·         latin5(ISO 8859-9 土耳其语)校对规则:

o        latin5_bin

o        latin5_turkish_ci( 默认)

·         cp1257(Windows波罗的海) 校对规则:

o        cp1257_bin

o        cp1257_general_ci( 默认)

o        cp1257_lithuanian_ci

·         latin7(ISO 8859-13波罗的海)校对规则:

o        latin7_bin

o        latin7_estonian_cs

o        latin7_general_ci( 默认)

o        latin7_general_cs

·         cp1251(Windows 西里尔)校对规则:

o        cp1251_bin

o        cp1251_bulgarian_ci

o        cp1251_general_ci( 默认)

o        cp1251_general_cs

o        cp1251_ukrainian_ci

·         cp866(DOS 俄语)校对规则:

o        cp866_bin

o        cp866_general_ci( 默认)

·         koi8r(KOI8-R Relcom 俄语)校对规则:

o        koi8r_bin

o        koi8r_general_ci( 默认)

·         koi8u(KOI8-U 乌克兰语)校对规则:

o        koi8u_bin

o        koi8u_general_ci( 默认)

我们支持的亚洲字符集包括中文、日语、韩语和泰国语。这些可能比较复杂。例如,中文字符集必须考虑到上千种不同的字符。

·         big5(Big5传统中文) 校对规则:

o        big5_bin

o        big5_chinese_ci( 默认)

·         cp932(SJIS Windows日语)校对规则:

o        cp932_bin

o        cp932_japanese_ci( 默认)

·         eucjpms(UJIS Windows日语)校对规则:

o        eucjpms_bin

o        eucjpms_japanese_ci( 默认)

·         euckr(EUC-KR 韩语)校对规则:

o        euckr_bin

o        euckr_korean_ci( 默认)

·         gb2312(GB2312 简体中文)校对规则:

o        gb2312_bin

o        gb2312_chinese_ci( 默认)

·         gbk(GBK简体中文) 校对规则:

o        gbk_bin

o        gbk_chinese_ci( 默认)

·         sjis(Shift-JIS 日语)校对规则:

o        sjis_bin

o        sjis_japanese_ci( 默认)

·         tis620(TIS620 泰国语)校对规则:

o        tis620_bin

o        tis620_thai_ci( 默认)

·         ujis(EUC-JP 日语)校对规则:

o        ujis_bin

o        ujis_japanese_ci( 默认)

为什么需要cp932?

但是,“SHIFT JIS”作为描述性术语的含义变得非常含糊不清,并且它常常包括由不同供应商定义的Shift_JIS扩展部分。

例如,使用在日本Windows环境中使用的“SHIFT JIS”是Microsoft对Shift_JIS的Microsoft扩展,它的准确名字是Microsoft Windows Codepage: 932或cp932。除由Shift_JIS支持的字符之外,cp932支持扩展字符,如NEC选择的IBM扩展字符和IBM扩展字符。

许多日本用户在使用这些扩展字符过程中碰到过一些问题。这些问题是由于以下情况引起的:

·         MySQL自动转换字符集。

·         字符集通过Unicode转换(ucs2)。

·         sjis字符集不支持这些扩展字符转换。

·         从号称“SHIFT JIS”到Unicode的转换,存在一些转换规则,并且一些字符转换到Unicode依赖不同的转换规则。MySQL仅支持这些转换规则中的一种(在后面描述)。

MySQLcp932字符集可以解决这些转换问题。

因为MySQL支持字符集转换,将IANA Shift_JIS 和 cp932分离为两种不同字符集是重要的,因为它们提供不同的转换规则。

cp932与sjis有什么不同?

cp932字符集与sjis存在以下不同点:

·         cp932支持NEC特殊字符、NEC选择的IBM扩展字符和IBM选择的字符。

转换规则如下:

o        如果字符在JIS X 0208 和NEC特殊字符中同时存在,使用JIS X 0208 的编码点。

o        如果字符在NEC特殊字符和IBM选择的字符中同时存在,使用NEC特殊字符的编码点。

o        如果字符在IBM选择的字符和NEC选择的IBM扩展字符中同时存在,使用IBM扩展字符的编码点。

以下连接很重要。它们与下列字符集的编码相对应:

o        NEC特殊字符:

o        NEC选择的IBM扩展字符:

o        IBM选择的字符:

·         对于一些字符,与ucs2之间的转换与sjis和cp932之间的转换是不同的。下表举例说明了这些不同。

转换到ucs2:

sjis/cp932值

sjis→ ucs2转换

cp932 → ucs2转换

5C

005C

005C

7E

007E

007E

815C

2015

2015

815F

005C

FF3C

8160

301C

FF5E

8161

2016

2225

817C

2212

FF0D

8191

00a2

FFE0

8192

00a3

FFE1

81Ca

00aC

FFE2

从ucs2转换:

ucs2值

ucs2 → sjis转换

ucs2 → cp932转换

005C

815F

5C

007E

7E

7E

00a2

8191

3F

00a3

8192

3F

00aC

81Ca

3F

2015

815C

815C

2016

8161

3F

2212

817C

3F

2225

3F

8161

301C

8160

3F

FF0D

3F

817C

FF3C

3F

815F

FF5E

3F

8160

FFE0

3F

8191

FFE1

3F

8192

FFE2

3F

81Ca

mysql binlog查看指定数据库的方法。

查看oracle数据库监听器状态要查看Oracle数据库的监听器状态,您可以使用Oracle提供的lsnrctl命令行工具。以下是如何检查Oracle监听器状态的步骤和示例代码:打开命令行工具(在Windows上是命令提示符或PowerShell,在Unix/Linux系统上是终端)。输入以下命令来启动lsnrctl:lsnrctl status这将显示监听器的当前状态,包括它是启动还是停止,以及

# 查看Sybase IQ数据库字符集在现代信息系统中,数据库的字符集(Character Set)扮演着至关重要的角色。字符集直接影响到数据的存储和检索,尤其是在处理多语言字符时。Sybase IQ是一款高性能的分析型数据库,它支持多种字符集。了解如何查看Sybase IQ数据库的字符集对于维护和管理数据库至关重要。## 为什么要知道字符集?在不同的数据库系统中,字符集的选择会影响数

# 如何查看MySQL数据库的字符集了解数据库的字符集是一个非常重要的任务,尤其是在处理多语言和特殊字符时。MySQL是一个流行的数据库管理系统,其支持多种字符集。因此,作为一名新手开发者,掌握如何查看并理解这些字符集是开启数据库管理旅程的第一步。## 流程概述在查看MySQL数据库字符集的过程中,我们可以按照以下步骤进行操作:| 步骤 | 描述 ||------|------|

# Mysql查看数据库字符集教程你好,作为一名经验丰富的开发者,我将为你详细介绍如何在 Mysql 数据库中查看字符集的方法。下面是整个流程的步骤表格。```mermaidflowchart TDA(开始)B(连接数据库)C(选择数据库)D(查看字符集)E(结束)A --> BB --> CC --> DD --> E```## 步骤详解### 1. 连接

# 如何实现“mysql查看数据库字符集 命令”## 简介作为一名经验丰富的开发者,我将教你如何在mysql中查看数据库字符集,这对于刚入行的小白来说可能是一个比较困扰的问题。下面我将详细介绍整个过程,帮助你轻松掌握这一命令。## 流程首先,我们来看一下整个操作的流程,可以用表格展示步骤:| 步骤 | 操作 || ---- | -------- || 1 | 登录

# 查看SQL Server数据库字符集作为一名经验丰富的开发者,我将教你如何查看SQL Server数据库字符集。下面是整个过程的步骤:| 步骤 | 操作 || --- | --- || 第一步 | 连接到SQL Server数据库 || 第二步 | 查询数据库字符集 || 第三步 | 查看结果 |下面是每一步需要做的操作及相应的代码:## 第一步:连接到SQL Serv

# SQL Server 数据库字符集的探讨在使用 SQL Server 进行数据库管理时,字符集(Collation)是一个重要的概念。字符集决定了如何存储和比较字符数据。不同的字符集可以影响查询结果以及数据的排序和比较方式。因此,了解 SQL Server 中的字符集是每位数据库管理员和开发人员的基础知识之一。## 什么是字符集?字符集是理解数据库中如何处理和存储字符串数据的核心元

# MySQL 查看数据库字符集编码在开发过程中,字符集编码问题常常会给我们带来困扰,尤其是在国际化应用中,正确地处理字符集是至关重要的。今天,我将教你如何查看 MySQL 数据库的字符集编码。我们将以简单明了的步骤带你完成这一过程。## 流程概述首先,让我们列出查看数据库字符集编码的步骤:| 步骤 | 操作 | 描述

【Oracle 数据库查询字符集】查询出 NLS_NCHAR_CHARACTERSET 参数的值即是数据库的字符集。select * from nls_database_parameters;【PG 数据库查询字符集】正常从 pg_database 查出来的 encoding 是数字 6,通过 pg_encoding_to_char() 函数可以将数字 6 转化为代表的编码 UTF8。

本文主要介绍oracle字符集问题,以及介绍了简单的字符集修改方法。

character_set_client:客户端请求数据的字符集character_set_connection:客户

# 如何查看MySQL数据库默认字符集## 一、整体流程首先,我们需要连接到MySQL数据库,然后查看数据库的默认字符集。下面是整个过程的步骤表格:| 步骤 | 操作 || --- | --- || 1 | 登录MySQL数据库 || 2 | 查看当前数据库的默认字符集 |## 二、具体操作步骤### 步骤1:登录MySQL数据库首先,打开终端或命令行工具,输入以

修改及查看mysql数据库的字符集操作系统:Windows Server 2008 R2Mysql版本:mysql-5.6.29-winx64事由:MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题)一、登录MySQL查看用SHOW VARIABLES

服务器端:(oracle服务器端字符集)数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。 1. 字符集:     (1)用来存储CHAR, VARCHAR2, CLOB, LONG等类型数据     (2)用来标

华子目录MySQL库操作查看库创建数据库查看创建的数据库查看警告删除数据库切换数据库显示当前数据库的变量值信息MySQL行格式行格式介绍显示行格式信息查看当前使用的数据库查看当前数据库版本查看当前用户查看所有用户查看MySQL支持的存储引擎显示当前数据库中所有表执行系统命名MySQL字符集查看字符集通过配置文件修改字符集查看当前MySQL服务实例支持的==校对规则==utf8和utf8mb4的区

以下均在mysql 5.5命令行中运行通过:查看MySQL支持的字符集:show charset;查看字符集:status下面的更具体:SHOW VARIABLES LIKE 'character_set_%';查看排序方式:SHOW VARIABLES LIKE 'collation_%';数据库建立时候一般会使用默认的字符集,除非在建立的时候指定:CREATE DATABASE [db-nam

详细讲解Sybase数据库乱码问题的解决方法   搭建测试数据库服务器时,遇到了乱码问题,之前没有遇到是因为开发数据库服务器是早就安装好并设置好字符集的,因此些问题在部署测试环境时才出现,当时已经将数据库配置完毕,并且所有的初始化脚本都已经执行完毕,工程也已经成功部署在WebLogic上,打开IE,运行程序,却发现所有从数据库中读取出来的都是乱码,经过上网搜索的相关资料,需要设置字符集

SQL语句:(增删改查)SQL(Structured Query Language 即结构化查询语言) SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTERDML语句 数据库操纵语言(对记录的操作): 插入数据INSERT、删除数据DELETE

在做一个web项目的时候需要做一个通用类去处理一些问题,想到这个类很多地方都有用到,又不想每次都new一个,因此就定义了里面的方法是静态方法,然后又因为多个静态方法都用到了同一个对象,结果定义了一个类的全局变量让每个静态方法去调用它,刚开始没什么问题,后来项目上线没多久就挂了,最后发现这样做导致了多线程的并发问题,所以就想在这里记录一下…下面是一个例子,例如:public class TestUt

Elasticsearch 架构深度解析 本文深入剖析Elasticsearch的分布式系统架构,揭示其支撑亿级数据毫秒级搜索的奥秘。主要内容包括: 架构全景:展示客户端层、协调节点、主节点、数据节点和Ingest节点的协作关系 核心组件详解: 协调节点的请求路由和结果合并机制 主节点负责集群状态管理和分片分配 数据节点处理存储和查询操作 Ingest节点实现数据预处理 存储引擎:Lucene倒排索引的工作原理,通过词到文档映射实现高效搜索 文章结合图解和真实场景,帮助读者掌握设计高性能、高可用集群的关键原

基于合成孔径雷达(SAR)的距离多普勒(Range-Doppler, RD)成像算法 一、RD算法核心原理 1. 信号模型 发射信号:线性调频(LFM)信号 \(st(t)=exp(jπKt2),K=τB\) 其中 B 为带宽,τ 为脉冲宽度 回波信号: \(sr(t)=σ⋅exp(jπK(t−2R ...

性价比更高:Mars 系列的精度(0.1mm RMS)与 Motion Analysis 的 Vantage 系列(0.05mm RMS)接近,但单相机价格仅为后者的 70%,整套系统成本降低 30%(例如,覆盖 50㎡车间的系统,NOKOV 度量约 30 万元,Motion Analysis 超 50 万元),更符合国内企业的预算;例如,Futek 角度传感器直接安装在机械臂关节处,读取关节转动角度,数据绝对稳定,无任何漂移,成本约 1-3 万元,适合对精度要求极高的关节校准;

博主名称:月夜的风吹雨 个人专栏: 《C语言》《基础数据结构》⛺️任何一个伟大的思想,都有一个微不足道的开始!引言单链表是一种物理存储非连续、逻辑存储连续的数据结构,其数据元素通过节点间的指针链接维持逻辑顺序。相较于顺序表,单链表无需预先分配固定内存,插入、删除操作更灵活,是哈希桶、图的邻接表等复杂 ...

THE END
0.真实世界的自然语言处理(一)(5)答案是:西班牙语、德语、土耳其语、法语、葡萄牙语、世界语、意大利语、匈牙利语和柏柏尔语。我从 Tatoeba 上排名前 10 的最受欢迎的使用拉丁字母表的语言中挑选了它们。你可能对这里列出的一些语言不熟悉。对于那些不熟悉的人来说,世界语是一种在 19 世纪末发明的构造辅助语言。柏柏尔语实际上是一组与阿拉伯语等闲jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1::3;991
1.字母‘J’的诞生‘J’对语言演变轨迹及宗教词汇语义的影响1524 年,意大利人 Gian Giorgio Trissino 是第一个将 J 用作字母的人。这个新字母所发出的声音还有另一种常见的书写方式“dg”。由于拉丁语和法语对意大利语的影响,字母 J 只不过是书写 “dg” 的另一种方式。 However, back then, the usage of J was far from common, even in Italy, and it wouldnjvzquC41dnuh0lxfp0tfv8z235<7;B641cxuklqg1fkucrqu13:83;<88:
2.iOS和iPadOS26功能可用性意大利语 日语 韩语 中文普通话 (中国大陆) 中文普通话 (台湾) 俄语 西班牙语 (墨西哥) 西班牙语 (西班牙) 西班牙语 (美国) 土耳其语 返回页首 辅助功能:“放大器”文本检测 于iOS 提供 阿拉伯语 粤语(中国大陆) 粤语(香港) 英语(澳大利亚) 英语(印度) 英语(爱尔兰) 英语(马来西亚) 英语(新西兰) 英语(菲律宾jvzquC41yy}/cyung0ipo7hp1kut1ojcvwxf/j{ckngckunv{1
3.四川省大学英语二级考试词汇表字母表 already ad.已经,早已 also ad..同样地;而且(也) not only…but also 不但…而且 alter v. 改变,变更 alternative n. 选择之事物;选择余地 a. 二者选择其一的,供选择的 although conj.虽然;尽管 altogether ad.完全,全部地;总起来说,总之;总共 always ad.总是,始终 AM (=A.M.,a.m.) 午前,jvzquC41yy}/ulmzoxi/exr0ep5jpot136721:722;4ivv