小结下MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法第13页
2018-09-07 13:25
乱码产生原因
mysql字符编码是版本4.1引入的,支持多国语言,而且一些特性已经超过了其他的数据库系统。
我们可以在MySQLCommandLineClient下输入如下命令查看mysql的字符集
mysql>SHOWCHARACTERSET;
+----------+-----------------------------+---------------------+--------+
CharsetDescriptionDefaultcollationMaxlen
+----------+-----------------------------+---------------------+--------+
big5Big5TraditionalChinesebig5_chinese_ci2
dec8DECWestEuropeandec8_swedish_ci1
cp850DOSWestEuropeancp850_general_ci1
hp8HPWestEuropeanhp8_english_ci1
koi8rKOI8-RRelcomRussiankoi8r_general_ci1
latin1cp1252WestEuropeanlatin1_swedish_ci1
latin2ISO8859-2CentralEuropeanlatin2_general_ci1
swe77bitSwedishswe7_swedish_ci1
asciiUSASCIIascii_general_ci1
ujisEUC-JPJapaneseujis_japanese_ci3
sjisShift-JISJapanesesjis_japanese_ci2
hebrewISO8859-8Hebrewhebrew_general_ci1
tis620TIS620Thaitis620_thai_ci1
euckrEUC-KRKoreaneuckr_korean_ci2
koi8uKOI8-UUkrainiankoi8u_general_ci1
gb2312GB2312SimplifiedChinesegb2312_chinese_ci2
greekISO8859-7Greekgreek_general_ci1
cp1250WindowsCentralEuropeancp1250_general_ci1
gbkGBKSimplifiedChinesegbk_chinese_ci2
latin5ISO8859-9Turkishlatin5_turkish_ci1
armscii8ARMSCII-8Armenianarmscii8_general_ci1
utf8UTF-8Unicodeutf8_general_ci3
ucs2UCS-2Unicodeucs2_general_ci2
cp866DOSRussiancp866_general_ci1
keybcs2DOSKamenickyCzech-Slovakkeybcs2_general_ci1
macceMacCentralEuropeanmacce_general_ci1
macromanMacWestEuropeanmacroman_general_ci1
cp852DOSCentralEuropeancp852_general_ci1
latin7ISO8859-13Balticlatin7_general_ci1
cp1251WindowsCyrilliccp1251_general_ci1
cp1256WindowsArabiccp1256_general_ci1
cp1257WindowsBalticcp1257_general_ci1
binaryBinarypseudocharsetbinary1
geostd8GEOSTD8Georgiangeostd8_general_ci1
cp932SJISforWindowsJapanesecp932_japanese_ci2
eucjpmsUJISforWindowsJapaneseeucjpms_japanese_ci3
+----------+-----------------------------+---------------------+--------+
36rowsinset(0.02sec)
更多mysql的字符集知识可以参考本论坛的
或者mysql官方的
MySQL4.1的字符集支持(CharacterSetSupport)有两个方面:字符集(Characterset)和排序方式(Collation)。对于字符集的支持细化到四个层次:服务器(server),数据库(database),数据表(table)和连接(connection)。
查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql>SHOWVARIABLESLIKEcharacter_set_%;
+--------------------------+-------------------------------------------+
Variable_nameValue
+--------------------------+-------------------------------------------+
character_set_clientlatin1
character_set_connectionlatin1
character_set_databaselatin1
character_set_filesystembinary
character_set_resultslatin1
character_set_serverlatin1
character_set_systemutf8
character_sets_dirD:\MySQL\MySQLServer5.0\share\charsets\
+--------------------------+-------------------------------------------+
8rowsinset(0.06sec)
mysql>SHOWVARIABLESLIKEcollation_%;
+----------------------+-------------------+
Variable_nameValue
+----------------------+-------------------+
collation_connectionlatin1_swedish_ci
collation_databaselatin1_swedish_ci
collation_serverlatin1_swedish_ci
+----------------------+-------------------+
3rowsinset(0.02sec)
上面列出的值就是系统的默认值。latin1默认校对规则是latin1_swedish_ci,默认是latin1的瑞典语排序方式.
为什么呢默认会是latin1_swedish_ci呢,追溯一下mysql历史很容易发现
1979年,一家瑞典公司Tcx欲开发一个快速的多线程、多用户数据库系统。Tcx公司起初想利用mSQL和他们自己的快速低级例程(IndexedSequentialAccessMethod,ISAM)去连接数据库表,然而,在一些测试以后得出结论:mSQL对其需求来说不够快速和灵活。这就产生了一个连接器数据库的新SQL接口,它使用几乎和mSQL一样的API接口。这个API被设计成可以使那些由mSQL而写的第三方代码更容易地移植到MySQL。
相信如果mysql是中国开发的,那么汉语也是默认编码了
当然我们也可以自己需要修改mysql的默认字符集
在mysql配置文档,找到如下两句:
[mysql]
default-character-set=latin1
和
#createdandnocharactersetisdefined
default-character-set=latin1
修改后面的值就可以。
这里不建议改,仍保留默认值
也就是说启动mysql时,如果没指定指定一个默认的的字符集,这个值继承自配置文件中的;
此时character_set_server被设定为这个默认的字符集;当创建一个新的数据库时,
除非明确指定,这个数据库的字符集被缺省设定为character_set_server;当选定了一个数据库时,
character_set_database被设定为这个数据库默认的字符集;在这个数据库里创建一张表时,
表默认的字符集被设定为character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集。
这样问题就随之而来了,假如一数据库是gbk编码。如果访问数据库时没指定其的字符集是gbk。
那么这个值将继承系统的latin1,这样就做成mysql中文乱码。
乱码解决方法
要解决乱码问题,首先必须弄清楚自己数据库用什么编码。如果没有指明,将是默认的latin1。
我们用得最多的应该是这3种字符集gb2312,gbk,utf8。
那么我们如何去指定数据库的字符集呢?下面也gbk为例
【在MySQLCommandLineClient创建数据库】
mysql>CREATETABLE`mysqlcode`(
->`id`TINYINT(255)UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,
->`content`VARCHAR(255)NOTNULL
->)TYPE=MYISAMCHARACTERSETgbkCOLLATEgbk_chinese_ci;
QueryOK,0rowsaffected,1warning(0.03sec)
123下一页阅读全文
上一篇:php支付宝系列之电脑网站支付
下一篇:PHP默认安装产生系统漏洞
文章标题:小结下MySQL中文乱码,phpmyadmin乱码,php乱码 产生原因及其解决方法第13页
文章链接:http://soscw.com/index.php/essay/12568.html