簡體   English   中英

MySQL的:latin1-> utf8。 將字符轉換為其等效的多字節

[英]Mysql: latin1-> utf8. Convert characters to their multibyte equivalents

latin1中有一個表,在cp1252中有一個站點,我想在utf8中有表,而在utf-8中有站點

我弄完了:

1)在網頁上: Content-Type: text/html;charset=utf-8

2)Mysql: ALTER TABLE XXX CONVERT TO CHARACTER SET utf8

_

此SQL無法按我的要求工作 -不會將數據庫中的äü字符轉換為等效的多字節字符

請幫忙。 坦克

本博客文章所述 ,使用MySQL的ALTER TABLE CONVERT語法是一個壞主意[TM]。 如博客文章中所述,導出數據,轉換表,然后重新導入數據。

另一個想法:您是否通過/etc/my.cnf或mysqli :: set-charset設置了默認的客戶端連接字符

我是個傻瓜。 SET NAMES丟失。

我現在知道的是:

1)每次更改列的字符集,總是對實際數據進行編碼! 將字段更改為二進制即可看到。

2)列的字符集是在先的!,表和數據庫字符集位於優先級之后。 它們主要用於設置默認值。 (對最后一句話不確定100%)

3) SET NAMES 非常重要。 正確設置名稱后,德語字符可以出現在latin1中,並且可以正確放置在utf8表中(由Mysql靜默編碼)。 無論表編碼是什么,服務器都可以按照您希望的編碼將數據發送到網頁。 可以重新編碼以輸出

4)如果有一個編碼A的列和一個編碼B的列,並且您將它們進行了比較(或使用LIKE),則Mysql會靜默轉換它們,使其看起來像是處於一種編碼中

5)Mysql很聰明。 除非類型為二進制,否則它永遠不會像字節一樣對文本進行操作。 它總是作為字符運行! 如果他知道數據編碼,他希望latin1中的would等於utf8中的ё。

由於您聲稱現在可以恢復,因此建議在數據庫中修改字符。

您如何訪問mysql中的數據? 如果使用的是PHP之類的編程接口,則可能需要告訴該接口期望使用哪種字符編碼。

例如,在PHP中,您將需要調用mysql_set_charset("utf8");類的東西mysql_set_charset("utf8"); 但也可以使用SET NAMES utf8的SQL查詢來完成

然后,您還需要確保顯示文本的任何內容都知道它是utf8,並且正在使用適當的編碼進行渲染。 例如,在網頁上,您需要將內容類型設置為utf-8。 類似於Content-Type: text/html;charset=utf-8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM