2010-06-23 118 views
2

在mySql表中,我使用Latin1字符集將文本存儲在varchar字段中。由於我們的網站現在在更多國家得到支持,我們需要支持UTF8。如果我將這些字段更改爲UTF8,會發生什麼情況?這樣做是否安全,還是會混淆這些字段中的數據?當將字段更改爲UTF8時,是否需要考慮這些內容?MySql varchar從Latin1更改爲UTF8

謝謝!

回答

5

MySQL的處理這個問題很好:

CREATE TEMPORARY TABLE t1 (
    c VARCHAR(10) 
) CHARACTER SET ="latin1"; 

INSERT INTO t1 VALUES ("æøå"); 
SELECT * FROM t1; # 'æøå' 

ALTER TABLE t1 CHARACTER SET = "utf8"; 
SELECT * FROM t1; # 'æøå' 

DROP TEMPORARY TABLE t1; 

編輯:還有是不能存儲爲UTF-8,所以你不應該得到任何dataloss

+0

謝謝!我正在使用Navicat,我可以(而不是您的解決方案)在設計表格模式下從Latin1更改爲UTF8嗎? (這將改變表) – Mrbiggerm 2010-06-23 09:40:10

+0

我不知道Navicat,但我猜想它只是做一個改變表。請務必先備份你的表格:) – simendsjo 2010-06-23 10:07:51

1

有不該」沒有Latin-1字符沒有任何數據庫問題。 MySQL將在您進行更改時處理編碼之間的數據轉換。

當您向網站添加對UTF-8的支持時,還需要注意其他事項。

  • 爲了獲得最佳效果,您應該確保與數據庫的連接使用UTF-8作爲連接字符集。您可以通過在建立連接時發出SET NAMES utf8來完成此操作。
  • 您需要確保您的網頁本身以UTF-8編碼方式向瀏覽器聲明,方法是更改​​元標記。
  • 安全考慮:你應該檢查用戶輸入以確保它是有效的UTF-8,以避免跨站點腳本的可能性(XSS)攻擊