Tom*_*mmy 3 mysql bash byte-order-mark utf-8
我有问题用utf-8编码写入mysql DB.我的应用程序有点复杂,所以我会尝试尽可能具体.(我的申请要求斯洛伐克特殊字体(有utf-8),如ľščťžýáí等.
我正在运行debian.我相信我的语言环境设置正确,但要确定:
root@radiator:/var/scripts# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=sk_SK.UTF-8
LANGUAGE=sk_SK.UTF-8:cs_CZ.UTF-8
LC_CTYPE="sk_SK.UTF-8"
LC_NUMERIC="sk_SK.UTF-8"
LC_TIME="sk_SK.UTF-8"
LC_COLLATE="sk_SK.UTF-8"
LC_MONETARY="sk_SK.UTF-8"
LC_MESSAGES="sk_SK.UTF-8"
LC_PAPER="sk_SK.UTF-8"
LC_NAME="sk_SK.UTF-8"
LC_ADDRESS="sk_SK.UTF-8"
LC_TELEPHONE="sk_SK.UTF-8"
LC_MEASUREMENT="sk_SK.UTF-8"
LC_IDENTIFICATION="sk_SK.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
我有bash脚本应该写文本(用斯洛伐克语写到DB.)(第一个哈希字符是因为debian不知道使用BOM,还是不知道如何处理它)
#
#!/bin/bash
table=$1
cycle=$2
sstart=$3
eend=$4
dbtext=$(cat /var/www/vids/$5/vars/$5.recogn.p.tmp2)
qry="INSERT INTO \`video\`.\`$table\` (\`DB_ID\` , \`LNX_ID\` , \`STIME\` , \`ETIME\` , \`TEXT\` ) VALUES ( NULL , '$cycle', '$sstart', '$eend', '$dbtext');"
mysql --host=localhost --database 'video' --user=uzivatel --password=heslo << eof
$qry
eof
Run Code Online (Sandbox Code Playgroud)
这是提到的tmp2文件的内容(此文件的编码为utf-8):
Tá žena držal poznali poznal jeho rodi?ov poznali podsvetie hodváb ulsteru mám ostatných tak ve?mi dobre ako boli pre nato že sa bude vydáva? ale skóre nevyšlo to potom zas nas?ahovala.
Run Code Online (Sandbox Code Playgroud)
在phpmyadmin中它看起来像:
Tá žena držal poznali poznal jeho rodiÄov poznali podsvetie hodváb ulsteru mám ostatných tak veľmi dobre ako boli pre nato že sa bude vydávaÅ¥ ale skóre nevyÅ¡lo to potom zas nasÅ¥ahovala.
Run Code Online (Sandbox Code Playgroud)
(此字段中的编码为utf8_slovak_ci)(谷歌浏览器编码为utf8).
我花了整整一天来谷歌这个,我不知道什么是问题.请你帮助我好吗 ?我知道你是最棒的.. :)
看起来您的UTF-8输入在某个时刻以单字节编码进行解释,最有可能是mysql因为数据库连接可能默认为latin1.
尝试添加--default-character-set=utf8到您的mysql通话中.(或者,SET NAMES utf8查询之前的put应具有相同的效果.)