資料庫的字元集
『壹』 PHP編碼問題:資料庫中的字元集編碼。。。。。
流行的關系資料庫系統都支持資料庫字元集編碼,也就是說在創建資料庫時可以指定它自己的字元集設置,資料庫的數據以指定的編碼形式存儲。當應用程序訪問數據時,在入口和出口處都會有字元集編碼的轉換。對於中文數據,資料庫字元編碼的設置應當保證數據的完整性。GB2312、GBK、UTF-8 等都是可選的資料庫字元集編碼;當然我們也可以選擇 ISO8859-1 (8-bit),只是我們得在應
用程序寫數據之前先將 16Bit 的一個漢字或 Unicode 拆分成兩個 8-bit 的字元,讀數據之後也需要將兩個位元組合並起來,同時還要判別其中的 SBCS 字元,因此我們並不推薦採用 ISO8859-1 作為資料庫字元集編碼。這樣不但沒有充分利用資料庫自身的字元集編碼支持,而且同時也增加了編程的復雜度。編程時,可以先用資料庫管理系統提供的管理功能檢查其中的中文數據是否正確。
PHP 程序在查詢資料庫之前,首先執行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你網頁的編碼(charset=xxxx),如果網頁中 charset=utf8,則 xxxx=utf8,如果網頁中 charset=gb2312,則xxxx=gb2312,幾乎所有 WEB 程序,都有一段連接資料庫的公共代碼,放在一個文件里,在這文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
SET NAMES 顯示客戶端發送的 SQL 語句中使用什麼字元集。因此,SET NAMES 'utf-8' 語句告訴伺服器「將來從這個客戶端傳來的信息採用字元集 utf-8」。它還為伺服器發送回客戶端的結果指定了字元集(例如,如果你使用一個 SELECT 語句,它表示列值使用了什麼字元集)。
不知道這資料是不是你說的那些。呵呵~~~
『貳』 怎樣查看資料庫的字元集
Oracle資料庫查看和修改伺服器端的字元集的方法是本文主要要介紹的內容,接下來救讓我們一起來了解一下這部分內容。
A、oracle server 端字元集查詢
select userenv('language') from al
其中NLS_CHARACTERSET 為server端字元集
NLS_LANGUAGE 為 server端字元顯示形式
B、查詢oracle client端的字元集
$echo $NLS_LANG
如果發現你select 出來的數據是亂碼,請把client端的字元集配置成與linux操作系統相同的字元集。如果還是有亂碼,則有可能是資料庫中的數據存在問題,或者是oracle服務端的配置存在問題。
C、server端字元集修改
將資料庫啟動到RESTRICTED模式下做字元集更改:
SQL> conn /as sysdba Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我們的字元集:新字元集必須為舊字元集的超集,這時我們可以跳過超集的檢查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL> select * from v$nls_parameters;
略
19 rows selected.
重啟檢查是否更改完成:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> select * from v$nls_parameters;
略
19 rows selected.
我們看到這個過程和之前ALTER DATABASE CHARACTER SET操作的內部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle資料庫繞過了子集與超集的校驗。
這一方法在某些方面是有用處的,比如測試;應用於產品環境大家應該格外小心,除了你以外,沒有人會為此帶來的後果負責。
結語(我們不妨再說一次):
對於DBA來說,有一個很重要的原則就是:不要把你的資料庫置於危險的境地!
這就要求我們,在進行任何可能對資料庫結構發生改變的操作之前,先做有效的備份,很多DBA沒有備份的操作中得到了慘痛的教訓。
D、client端字元集修改
在 /home/oracle與 /root用戶目錄下的。bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語句
『叄』 【MySQL筆記】MySQL的字元集
MySQL字元集配置是資料庫管理中的重要環節。在未做特定設置時,MySQL 5.7的初始版本默認字元集是latin1,但從MySQL 8.0開始,utf8mb4成為默認選項。要了解默認字元集,可以運行命令show character set;查看。
創建資料庫時,字元集的選擇會根據配置和環境有所不同。官方文檔建議,具體取決於你的需求和系統設置。查看資料庫的默認COLLATE(字元排序規則),只需在MySQL客戶端輸入相同的命令。
查詢已創建資料庫的字元集有兩種方法:一種是直接在資料庫管理界面查詢,另一種是通過命令行操作。具體步驟取決於你使用的工具和平台。
在需要修改已有對象字元集時,如表或欄位,可以通過ALTER TABLE語句來執行,確保選擇正確的字元集和排序規則。
最後,如果你希望修改MySQL伺服器(實例)的全局字元集設置,你需要編輯my.cnf文件中的[mysqld]部分,更改字元集配置,然後重啟服務以使更改生效。
『肆』 mysql濡備綍鍦ㄥ凡鏈夋暟鎹搴撲笂緇熶竴瀛楃﹂泦
鍓嶈█
鏁版嵁搴撻噷闈錛岄儴鍒嗘暟鎹琛ㄥ拰鏁版嵁鏄痩atin1鐨勶紝閮ㄥ垎鏁版嵁琛ㄥ拰鏁版嵁鏄疷TF8錛岃繕鏈夐儴鍒嗚〃錛岃〃緇撴瀯鏄痷tf8鑰屾暟鎹鏄痩atin1銆
榪欑嶅囪懇鎯呭喌錛屽伐浣滀簡鍗佸嚑騫寸殑鎴戱紝榪樻槸絎涓嬈$板埌銆備笅闈㈣翠竴涓嬶紝鎬庝箞鏍峰瓧絎﹂泦緇熶竴鎴恥tf8
1錛屽緩涓涓絀烘暟鎹搴
2錛屾妸琛ㄧ粨鏋勫拰鏁版嵁鏄痷tf8鐨勮〃瀵煎嚭錛岀劧鍚庣洿鎺ュ煎叆鍒版柊鐨勬暟鎹搴撲腑
3錛屾暟鎹琛ㄥ拰鏁版嵁閮芥槸latin1鐨勮〃錛屽厛瀵煎嚭琛ㄧ粨鏋勫拰鏁版嵁錛屽姞涓--default-character-set=latin1錛屽皢瀵煎嚭鏂囦歡涓錛宭atin1鏀逛負utf8錛屽湪瀵煎叆鍒版柊鐨勬暟鎹搴撲腑銆
4錛岃〃緇撴瀯鏄痷tf8錛岃〃鏁版嵁鏄痩atin1鐨勶紝鏈変簩縐嶆柟娉曪細
4.1錛屽厛瀵煎嚭琛ㄧ粨鏋勶紝瀵煎叆鍒版柊鐨勬暟鎹搴撲腑銆傚煎嚭鏁版嵁錛屽姞涓--default-character-set=utf8錛屽洜涓鴻〃緇撴瀯鏄痷tf8錛岃〃鏁版嵁鏄痩atin1錛屽叆搴撴椂宸蹭貢鐮併傚湪灝嗘暟鎹瀵煎叆鍒版柊搴撲腑銆傝繖縐嶆柟妗堟湁緙虹偣錛--default-character-set=utf8錛屽煎嚭鐨勬暟鎹鍙鑳戒細鏈変涪澶憋紝瀵煎嚭鐨勬暟鎹錛屽湪瀵煎叆鏃跺彲鑳戒細鎶ラ敊銆
4.2錛屽彲浠ラ氳繃binary瀛楃﹂泦鍋氫腑杞錛屾帹鑽愯繖縐嶆柟娉
UPDATE user SET user_name = CONVERT(CONVERT(CONVERT(user_name USING latin1) USING binary) USING UTF8);
榪欑嶆柟娉曪紝鐪佸幓浜嗗煎嚭瀵煎叆鐨勯夯鐑︼紝閫熷害姣旇緝蹇錛11w鏉℃暟鎹錛屽樊涓嶅5-6縐
鏁版嵁搴撹捐¤繖鍧楅潪甯擱噸瑕侊紝鍦ㄨ捐℃暟鎹搴撴椂涓瀹氳佽冭檻娓呮氥傚湴鍩轟笉鐗錛屽ぇ鍘﹁繜鏃╀細鍊掔殑銆
鎮ㄥ彲鑳芥劅鍏磋叮鐨勬枃絝:綆鏋恗ysql瀛楃﹂泦瀵艱嚧鎮㈠嶆暟鎹搴撴姤閿欓棶棰榤ysql淇鏀規暟鎹搴撶紪鐮(鏁版嵁搴撳瓧絎﹂泦)鍜岃〃鐨勫瓧絎︾紪鐮佺殑鏂規硶mysql瀛楃﹂泦鍜屾暟鎹搴撳紩鎿庝慨鏀規柟娉曞垎浜獶W涓閾炬帴mysql鏁版嵁搴撴椂錛屽緩絝嬪瓧絎﹂泦涓鏂囧嚭鐜頒貢鐮佺殑瑙e喅鏂規硶