3

我在以 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=

我有 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

这是提到的 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.

在 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.

(此字段中的编码为 utf8_slovak_ci )(谷歌浏览器编码为 utf8)。

我花了一整天的时间来谷歌这个,我不知道是什么问题。请你帮助我好吗 ?我知道你是最好的.. :)

4

1 回答 1

7

看起来您的 UTF-8 输入在某些时候被解释为单字节编码,很可能是mysql因为数据库连接可能默认为latin1.

尝试添加--default-character-set=utf8到您的mysql通话中。(或者,SET NAMES utf8查询之前的 put 应该具有相同的效果。)

于 2013-07-22T21:59:20.307 回答