2017-09-11 16 views
0

일부 MySQL 문자 집합 오류가 있습니다. 저는 한국어입니다. 그래서 한국어를 MySQL 서버에 넣어야합니다. 그러나 나는 할 수 없다. 모든 문자 집합을 변경하고 "SET NAMES UTF8MB4" 쿼리를 보내지 만 내 프로그램이 다시 같은 오류를 인쇄합니다.MySQL을 수정할 수 없음 잘못된 문자열 값 (이미 모든 문자 집합 변경)

나는 "테스트" 및 프로그램에 삽입] (전당포 언어)

FormatEx(Query, sizeof(Query), "INSERT INTO %s_bans (type, ip, name, created, ends, length, reason, aid, adminIp, sid, country) VALUES \ 
        (1, '%s', '', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + %d, %d, '%s', (SELECT aid FROM %s_admins WHERE authid = '%s' OR authid REGEXP '^STEAM_[0-9]:%s$'), '%s', \ 
        (SELECT sid FROM %s_servers WHERE ip = '%s' AND port = '%s' LIMIT 0,1), ' ')", 
     DatabasePrefix, ip, (minutes * 60), (minutes * 60), banReason, DatabasePrefix, adminAuth, adminAuth[8], adminIp, DatabasePrefix, ServerIp, ServerPort); 

나는 많은 검색 및 테스트를 시도 넣어 시도,이 오류를 수정할 수 없습니다. 감사합니다.

서버 OS : 우분투 서버 16.04.3 64 비트

MySQL의 오류 : '숯불 %'와 같은

L 09/11/2017 - 20:18:22: [sbpp_main.smx] Verify Insert Query Failed: Incorrect string value: '\xED \x85 \x8C ...' for column 'reason' at row 1 

쇼 변수; :

+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

쇼 테이블 sb_bans (목표 테이블) 작성 :

| sb_bans | CREATE TABLE `sb_bans` (
    `bid` int(6) NOT NULL AUTO_INCREMENT, 
    `ip` varchar(32) DEFAULT NULL, 
    `authid` varchar(64) NOT NULL DEFAULT '', 
    `name` varchar(128) NOT NULL DEFAULT 'unnamed', 
    `created` int(11) NOT NULL DEFAULT '0', 
    `ends` int(11) NOT NULL DEFAULT '0', 
    `length` int(10) NOT NULL DEFAULT '0', 
    `reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, 
    `aid` int(6) NOT NULL DEFAULT '0', 
    `adminIp` varchar(32) NOT NULL DEFAULT '', 
    `sid` int(6) NOT NULL DEFAULT '0', 
    `country` varchar(4) DEFAULT NULL, 
    `RemovedBy` int(8) DEFAULT NULL, 
    `RemoveType` varchar(3) DEFAULT NULL, 
    `RemovedOn` int(10) DEFAULT NULL, 
    `type` tinyint(4) NOT NULL DEFAULT '0', 
    `ureason` text, 
    PRIMARY KEY (`bid`), 
    KEY `sid` (`sid`), 
    FULLTEXT KEY `reason` (`reason`), 
    FULLTEXT KEY `authid_2` (`authid`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 | 

MySQL의 상태 :

mysql Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using EditLine wrapper 

Connection id:   54 
Current database: 
Current user:   [email protected] 
SSL:     Not in use 
Current pager:   stdout 
Using outfile:   '' 
Using delimiter:  ; 
Server version:   5.7.19-0ubuntu0.16.04.1 (Ubuntu) 
Protocol version:  10 
Connection:    Localhost via UNIX socket 
Server characterset: utf8mb4 
Db  characterset: utf8mb4 
Client characterset: utf8mb4 
Conn. characterset: utf8mb4 
UNIX socket:   /var/run/mysqld/mysqld.sock 
Uptime:     18 min 43 sec 

Threads: 7 Questions: 1697 Slow queries: 0 Opens: 203 Flush tables: 1 Open      tables: 118 Queries per second avg: 1.511 

mysqld.cnf

[mysqld] 
character-set-client-handshake=FALSE 
init_connect="SET collation_connection = utf8mb4_general_ci" 
init_connect="SET NAMES utf8mb4" 
character-set-server = utf8mb4 
collation-server = utf8mb4_general_ci 

[client] 
default-character-set=utf8mb4 

mysql.cnf

[mysql] 
default-character-set = utf8mb4 

는 mysqldump.cnf

[mysqldump] 
default-character-set = utf8mb4 
+0

그래서 ... 어떤 문자열을 삽입하려합니까? 그리고 어떻게 그리고 어떤 인코딩이 있습니까? – deceze

+0

@deceze "테스트"를 시도하고 삽입을 사용하십시오. '인코딩이 무엇인가'라는 의미는 무엇입니까? Sry My Bad English :( – Darkhost

+0

[tag : pawn]에서 데이터베이스에 어떻게 연결합니까? 삽입하려는 문자열은 어디에서 왔습니까? 이것은 MySQL 쪽보다 폰쪽에 관한 것입니다. 귀하의 폰 코드에 대한 세부 사항, 귀하의 MySQL 서버 구성보다 적습니다. – deceze

답변

0

충분하지 않은 정보 - "인쇄 다시 잘못된 문자열 값"

  • 테스트는 글자 깨짐을 나타낸다는
  • 은``
  • ????????? 뭔가를 표시 절단을 나타냅니다 그밖에.

자세한 내용은 this을 참조하십시오.

참고 : root (또는 임의의 SUPER)은 init_connect을 실행하지 않습니다. 데이터베이스 기반 앱을 개발할 때마다 루트가 아닌 로그인을 제공하십시오.

오류 텍스트 \xED \x85 \x8C에 실제로 표시된대로 공백이 있습니까? (utf8 은 16 진수 ED858C입니다.) FormatEx의 출처는 어디입니까? FormatEx 공백을 삽입 할 수 있습니까 ??

+0

FormatEx가 https://sm.alliedmods.net/new-api/string/FormatEx (이 언어의 API) 일 수는 없으며이 프로그램의 개발자에게 문의하십시오. 오류 - L 09/11/2017 - 20:18:22 : [sbpp_main.smx] 삽입 쿼리 실패 확인 : 잘못된 문자열 값 : '\ xED \ x85 \ x8C ...'열 '이유'행 1 – Darkhost

+0

_Why "...이 보안 검사가 제거되었습니다 ..."와 같은 경고가있는 언어를 사용하는 사람이 있습니까? 오늘날 과격한 해킹이 발생했을 때 _ –