亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2986 | 回復(fù): 5
打印 上一主題 下一主題

Mysql在linux下和windows下的關(guān)于字符集的區(qū)別 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-05-07 22:29 |只看該作者 |倒序瀏覽
Mysql都是5.0以上的版本,linux 系統(tǒng)是UTF8,windows是日文系統(tǒng),而兩個系統(tǒng)中mysql里的字符集都是默認(rèn)的latin1

出現(xiàn)的問題是 在windows下varchar(30)的字段可以存儲30個漢字,而linux只能存10個漢字,看樣子帽似與系統(tǒng)的字符集有關(guān)系,可能是什么原因?

問題2是為什么 latin1存儲漢字也沒有問題呢?


謝謝!

[ 本帖最后由 flw10000 于 2009-5-7 22:32 編輯 ]

論壇徽章:
0
2 [報告]
發(fā)表于 2009-05-08 11:26 |只看該作者
這個問題有點(diǎn)復(fù)雜,希望我的接下來的表達(dá)讓能明白。但我也不能一些不明白的地方一會,和你交流一下。

在windows下varchar(30)的字段可以存儲30個漢字?
能不能貼一下。

show character set;
select version();
show create table YourTableName;

如果是UTF8的字符集,我覺的最多你可以存10個字符。
UTF8中的漢字需要占用三個字節(jié)。所以看到Linux下面只能存放10個漢字,那是正確的。


首先明確一下latin1是西歐字符集,也是可以存漢字的。gb2312本身兼容latin1
也就是gb2312>latin1
這樣存漢字會有一個問題,有很多字,他會以為是一樣的。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-05-08 11:34 |只看該作者
我剛弄了一個Windows的MySQL試了一下:
mysql> create table wu ( name varchar(12));
Query OK, 0 rows affected (0.11 sec)
mysql> insert into wu values('一二三四五六七八九十');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> show warnings;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1265 | Data truncated for column 'name' at row 1 |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from wu;
+--------------+
| name         |
+--------------+
| 一二三四五六 |
+--------------+
1 row in set (0.00 sec)


mysql> show create table wu;
+-------+----------------------------------------------
------------------------------------------+
| Table | Create Table
                                          |
+-------+----------------------------------------------
------------------------------------------+
| wu    | CREATE TABLE `wu` (
  `name` varchar(12) character set latin1 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.67-community-log |
+----------------------+
1 row in set (0.00 sec)

論壇徽章:
0
4 [報告]
發(fā)表于 2009-05-08 14:29 |只看該作者
原帖由 Coolriver 于 2009-5-8 11:26 發(fā)表
這個問題有點(diǎn)復(fù)雜,希望我的接下來的表達(dá)讓能明白。但我也不能一些不明白的地方一會,和你交流一下。

在windows下varchar(30)的字段可以存儲30個漢字?
能不能貼一下。

show character set;
select ver ...



謝謝Coolriver版主的關(guān)注!

windows下面存儲30個漢字是沒有問題的,在windows終端下看是30個'?',但是通過web界面是可以讀出來的!

windows的具體版本是:5.0.51b-community-nt

mysql>show create table YourTableName;
最后有一行顯示:
DEFAULT CHARSET=utf8

mysql>status;
其中幾行的結(jié)果:

Server characterset: latin1
Db       characterset: uft8
Client  characterset: latin1
Conn.  characterset: latin1

論壇徽章:
0
5 [報告]
發(fā)表于 2009-05-08 14:44 |只看該作者
原帖由 Coolriver 于 2009-5-8 11:34 發(fā)表
mysql> show warnings;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1265 | Data truncated for column 'name' at row 1 |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from wu;
+--------------+
| name         |
+--------------+
| 一二三四五六 |
+--------------+
1 row in set (0.00 sec)


mysql> show create table wu;
+-------+----------------------------------------------
------------------------------------------+
| Table | Create Table
                                          |
+-------+----------------------------------------------
------------------------------------------+
| wu    | CREATE TABLE `wu` (
  `name` varchar(12) character set latin1 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

mysql> select version();
+----------------------+
| version()            |
+----------------------+
| 5.0.67-community-log |
+----------------------+
1 row in set (0.00 sec)
  


另外請教一下,你的這些信息是怎么貼出來的,mysql 有什么命令可以將執(zhí)行的命令和結(jié)果都導(dǎo)出來嗎?

論壇徽章:
0
6 [報告]
發(fā)表于 2009-05-09 10:03 |只看該作者
你要看該字段的字符集,而不是缺省字符集

所以你必須把表結(jié)構(gòu)貼出來

可以斷定,windows下的表的該字段字符集是非latin的,
而linux下表的該字段字符集是latin的.

latin1為什么能存漢字, 因為他不把漢字當(dāng)字符看待, 只是認(rèn)為是簡單的ascii值(0--255之間), 即使不是漢字,亂碼也可以存進(jìn)去. (我曾經(jīng)用latin1字符集存圖片都可以),  linux下的環(huán)境是utf8, 一個漢字占3個字節(jié), 所以varchar(30) character set latin1最多只能存10個漢字.

如果把字符集改為UTF8或日文集, 他就會把輸入的字符當(dāng)做真正意義的字符來看待,  而不是簡單的ASCII值, 所以亂碼是存不了的. varchar(30) character set utf8能存30個任意的字符(包括漢字)

[ 本帖最后由 trainee 于 2009-5-9 10:08 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP