pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

使用 source 命令會(huì)破壞非 Unicode 文本編碼

Using source command corrupts non Unicode text encoding(使用 source 命令會(huì)破壞非 Unicode 文本編碼)
本文介紹了使用 source 命令會(huì)破壞非 Unicode 文本編碼的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

限時(shí)送ChatGPT賬號(hào)..

我必須將一些包含未編碼為 Unicode 的國(guó)家字符的數(shù)據(jù)導(dǎo)入到獨(dú)立的 MySQL 版本:5.0.18 在 Windows7 64 位上運(yùn)行.經(jīng)過一些最初的問題,我終于讓它在 MySQL 控制臺(tái)中工作.

I have to import some data containing national characters not coded as Unicode into stand alone MySQL Version: 5.0.18 running on Windows7 64bit. After some initial problems I finally got it working in MySQL console.

但由于數(shù)據(jù)超過 50 MB,因此無法在控制臺(tái)中輸入和/或使用剪貼板.所以我創(chuàng)建腳本文件才發(fā)現(xiàn)導(dǎo)入后國(guó)字是亂碼.

But as the data is more than 50 MByte typing into console and or using clipboard is not possible. So I created script file only to find out that the national characters are gibberish after import.

問題是,如果我對(duì)任何文件使用 source 命令,編碼就會(huì)中斷.如果我打開同一個(gè)文件并通過剪貼板將內(nèi)容復(fù)制到控制臺(tái),則一切正常.這里最小的 MCVE 用于測(cè)試:

The problem is that if I use source command with any file the encoding broke. If I open the same file and copy the stuff to console by clipboard all works as should. Here smallest MCVE to test this:

DROP DATABASE IF EXISTS dbs;
CREATE DATABASE dbs;
USE dbs;

SET NAMES latin2;

DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(50) default '' );
INSERT INTO `tab` VALUES
 (1,'aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ'),
 (2,'á???éí??ňó?????ú y?á ??éí???ó ????ú Y?');
SELECT * FROM `tab`;

當(dāng)我通過剪貼板將其復(fù)制到MySQL控制臺(tái)時(shí),輸出如下:

When I copy this to MySQL console by clipboard the output is like this:

+------+----------------------------------------+
| ix   | nam                                    |
+------+----------------------------------------+
|    1 | aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ |
|    2 | á???éí??ňó?????ú y?á ??éí???ó ????ú Y? |
+------+----------------------------------------+
2 rows in set (0.00 sec)

這是需要的.但是當(dāng)我將所有這些放入 test.sql 文件并運(yùn)行

Which is desired. But when I put all this into test.sql file and run

source test.sql;

我得到了這個(gè)輸出:

+------+----------------------------------------+
| ix   | nam                                    |
+------+----------------------------------------+
|    1 | aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ |
|    2 | ?ń?′úYň??ˇ?ó°ü?˙ ?×┴ ╚¤╔═┼╝?? └ě??┌ ?? |
+------+----------------------------------------+

這顯然是錯(cuò)誤的(看起來像一些默認(rèn)的 MS-DOS 字符集).我認(rèn)為問題不在于表或數(shù)據(jù)庫(kù),因?yàn)檫@對(duì)于純文本輸出來說是一樣的:

Which is obviously wrong (looks like some default MS-DOS charset). I think the problem is not on side of table nor database as this is the same for pure text outs like:

SET NAMES latin2;
SELECT 'á???éí??ňó?????ú y?á ??éí???ó ????ú Y?' AS 'aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ';

帶有剪貼板的輸出:

+----------------------------------------+
| aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ |
+----------------------------------------+
| á???éí??ňó?????ú y?á ??éí???ó ????ú Y? |
+----------------------------------------+

source 文件:

+----------------------------------------+
| aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ |
+----------------------------------------+
| ?ń?′úYň??ˇ?ó°ü?˙ ?×┴ ╚¤╔═┼╝?? └ě??┌ ?? |
+----------------------------------------+

就像從文件導(dǎo)入時(shí)編碼被搞砸了一樣.或者在通過鍵盤剪貼板輸入到MySQL控制臺(tái)時(shí),編碼發(fā)生了變化.

It is like when importing from files the encoding got screwed. Or while inputing to MySQL console through Keyboard or Clipboard the coding got changed.

那么發(fā)生了什么以及如何糾正這個(gè)問題(不丟失數(shù)據(jù))?

So what is going on and how to correct this (without the loss of data)?

  • 使用 < 命令行選項(xiàng)代替 source 沒有幫助
  • 對(duì) source 使用 -e 命令行選項(xiàng)沒有幫助
  • 使用默認(rèn)字符集命令行選項(xiàng)沒有幫助
  • 對(duì)非 Unicode 字符串使用 UTF8 會(huì)導(dǎo)致數(shù)據(jù)過長(zhǎng)錯(cuò)誤和數(shù)據(jù)丟失
  • 剪貼板中的數(shù)據(jù)與文件中的數(shù)據(jù)相同
  • using < command line option instead of source does not help
  • using -e command line option for source does not help
  • using default charset command line option does not help
  • using UTF8 for non Unicode string lead to Data too long errors and loss of data
  • data in clipboard is the same as in the file

好吧,我嘗試了 MySQL 5.7.19 的較新版本,這花了我很長(zhǎng)時(shí)間才開始,因?yàn)樗麄兏牧顺跏蓟蛢?nèi)容(wtf?那個(gè)瘋狂得到 1.8 GByte 沒有任何數(shù)據(jù)!).無論我做什么,它的行為都是一樣的.所以我嘗試使用 UTF8 編碼:

Well I tried newer version of MySQL 5.7.19 which took mi quite a while to get started as they change the initialization and things (wtf? that insanity got 1.8 GByte without any data !). It behaves the same no matter what I do. So I tried to use UTF8 encoding:

DROP DATABASE IF EXISTS dbs;
CREATE DATABASE dbs CHARACTER SET utf8 COLLATE 'utf8_unicode_ci';
USE dbs;

SET NAMES utf8;

DROP TABLE IF EXISTS `tab`;
CREATE TABLE `tab` (`ix` INT default 0,`nam` VARCHAR(50) default '' ) CHARACTER SET utf8 COLLATE 'utf8_unicode_ci';
INSERT INTO `tab` VALUES
 (1,'á???éí??ňó?????ú y?á ??éí???ó ????ú Y?'),
 (2,'aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ');
SELECT * FROM `tab`;

#SELECT 'á???éí??ňó?????ú y?á ??éí???ó ????ú Y?' AS 'aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ';

#SHOW COLLATION;
#SHOW CHARACTER SET;
SHOW VARIABLES LIKE 'char%';

是的,腳本文件已轉(zhuǎn)換為 UTF8.現(xiàn)在這里是 my.ini 設(shè)置:

And Yes the script file is converted to UTF8. Now here is my.ini setting:

[mysql]

 default-character-set=utf8

[mysqld]

 skip-character-set-client-handshake
 character-set-server=utf8
 collation-server=utf8_unicode_ci

使用 source 此處最終為文件工作,結(jié)果如下:

This finally worked for the file using source here the result:

+------+--------------------------------------------------------------------------+
| ix   | nam                                                                      |
+------+--------------------------------------------------------------------------+
|    1 | á???éí??ňó?????ú y?á ??éí???ó ????ú Y?                                   |
|    2 | aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ                                   |
+------+--------------------------------------------------------------------------+
+--------------------------+--------------------------------------------------------------------+
| Variable_name            | Value                                                              |
+--------------------------+--------------------------------------------------------------------+
| character_set_client     | utf8                                                               |
| character_set_connection | utf8                                                               |
| character_set_database   | utf8                                                               |
| character_set_filesystem | binary                                                             |
| character_set_results    | utf8                                                               |
| character_set_server     | utf8                                                               |
| character_set_system     | utf8                                                               |
+--------------------------+--------------------------------------------------------------------+

推薦答案

您必須在創(chuàng)建表時(shí)指定 CHARACTER SET,最好是在列本身上.否則,您會(huì)從 SHOW VARIABLES LIKE 'char%';

You must specify a CHARACTER SET when creating the table, preferably on the column itself. Otherwise, you get some default from SHOW VARIABLES LIKE 'char%';

SET NAMES 在客戶端建立編碼.

當(dāng) INSERTingSELECTing 時(shí),編碼從客戶端的編碼 (SET NAMES) 更改為列的 (...VARCHAR ...字符集...).

When INSERTing or SELECTing, the encoding is changed from the client's encoding (SET NAMES) to the column's (... VARCHAR ... CHARACTER SET ...).

你真的需要latin2嗎?世界正在轉(zhuǎn)向 UTF-8.

Do you really need latin2? The world is moving to UTF-8.

這篇關(guān)于使用 source 命令會(huì)破壞非 Unicode 文本編碼的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應(yīng)該使用什么 SQL Server 數(shù)據(jù)類型來存儲(chǔ)字節(jié) [])
Interpreting type codes in sys.objects in SQL Server(解釋 SQL Server 中 sys.objects 中的類型代碼)
Typeorm Does not return all data(Typeorm 不返回所有數(shù)據(jù))
Typeorm .loadRelationCountAndMap returns zeros(Typeorm .loadRelationCountAndMap 返回零)
Convert multiple sub-queries to on join(將多個(gè)子查詢轉(zhuǎn)換為 on join)
How do I get the minute difference between 2 times in T SQL?(如何獲得 T SQL 中 2 次之間的微小差異?)
主站蜘蛛池模板: TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 船用泵,船用离心泵,船用喷射泵,泰州隆华船舶设备有限公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 山东包装,山东印刷厂,济南印刷厂-济南富丽彩印刷有限公司 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 高博医疗集团上海阿特蒙医院| sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 首页_欧瑞传动官方网站--主营变频器、伺服系统、新能源、软起动器、PLC、HMI | 气动隔膜泵-电动隔膜泵-循环热水泵-液下排污/螺杆/管道/化工泵「厂家」浙江绿邦 | 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | TPE塑胶原料-PPA|杜邦pom工程塑料、PPSU|PCTG材料、PC/PBT价格-悦诚塑胶 | 元拓建材集团官方网站| 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 电梯乘运质量测试仪_电梯安全评估测试仪-武汉懿之刻 | 电机保护器-电动机综合保护器-上海硕吉电器有限公司 | 聚合氯化铝-碱式氯化铝-聚合硫酸铁-聚氯化铝铁生产厂家多少钱一吨-聚丙烯酰胺价格_河南浩博净水材料有限公司 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 潍坊青州古城旅游景点攻略_青州酒店美食推荐-青州旅游网 | 智慧食堂_食堂管理系统_食堂订餐_食堂消费系统—客易捷 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 护栏打桩机-打桩机厂家-恒新重工 |