[mysql] MySQL에서 작은 따옴표를 이스케이프하는 방법

작은 따옴표 또는 큰 따옴표로 구성된 MySQL에 값을 어떻게 삽입합니까? 즉

This is Ashok's Pen.

작은 따옴표는 문제를 일으킬 것입니다. 다른 이스케이프 문자가있을 수 있습니다.

데이터를 올바르게 삽입하는 방법은 무엇입니까?



답변

간단히 말해서 :

SELECT 'This is Ashok''s Pen.';

따라서 문자열 내에서 각 작은 따옴표를 두 개로 바꿉니다.

또는:

SELECT 'This is Ashok\'s Pen.'

탈출 =)


답변

‘는 이스케이프 문자입니다. 따라서 문자열은 다음과 같아야합니다.

이것은 Ashok의 펜입니다

일부 프런트 엔드 코드를 사용하는 경우 데이터를 저장 프로 시저로 보내기 전에 문자열 바꾸기를 수행해야합니다.

예를 들어 C #에서는 다음을 수행 할 수 있습니다.

value = value.Replace("'", "''");

그런 다음 값을 저장 프로 시저에 전달합니다.


답변

“MySQL에서 문자를 이스케이프하는 방법”에 대한 내 대답을 참조하십시오.

MySQL과 통신하는 데 사용하는 라이브러리에는 이스케이프 기능이 내장되어 있습니다. 예를 들어 PHP에서는 mysqli_real_escape_string 또는 PDO :: quote를 사용할 수 있습니다.


답변

준비된 문을 사용하면 드라이버가 모든 이스케이프를 처리합니다. 예 (Java) :

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();


답변

이 코드를 사용하십시오.

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>

이것은 데이터베이스가 문자열의 특수 문자를 감지 할 수 없기 때문에 문제를 해결할 것입니다.


답변

당신의 관점에 따라 더 안전 할 수도 있고 아닐 수도있는 또 다른 방법이 있습니다. 특정 문자열 함수를 사용하기 때문에 MySQL 5.6 이상이 필요합니다 : FROM_BASE64.

삽입하려는 메시지가 있다고 가정 해 보겠습니다.

“아,”거의 머리가없는 닉은 우아한 손을 흔들었다. “중요하지 않은 문제…. 내가 정말로 합류하고 싶었던 것 같지 않다…. 지원할 것이라고 생각했지만, 요구 사항을 충족하지 못한 것 같다. ‘- ”

그 따옴표에는 작은 따옴표와 큰 따옴표가 많이 있으며 MySQL에 삽입하는 것은 정말 고통 스러울 것입니다. 프로그램에서 삽입하는 경우 따옴표 등을 이스케이프하기 쉽습니다.하지만 SQL 스크립트에 입력해야하는 경우 오류가 발생할 수있는 텍스트를 편집해야합니다 (따옴표를 이스케이프 처리). 또는 줄 바꿈 등에 민감합니다.

대신 텍스트를 Base64로 인코딩 할 수 있으므로 “깨끗한”문자열이됩니다.

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Base64 인코딩에 대한 몇 가지 참고 사항 :

  1. Base64 인코딩은 바이너리 인코딩 이므로 MySQL이 Base64로 인코딩 된 문자열을 바이트로 디코딩 한 다음 해석 할 것이기 때문에 인코딩을 수행 할 때 올바른 문자 집합을 가져 오는지 확인하는 것이 좋습니다. 확실히하다base64 및 MySQL은 문자 인코딩이 무엇인지에 동의합니다 (I는 UTF-8을 권장합니다).
  2. Stack Overflow에서 가독성을 위해 문자열을 50 개 열로 래핑했습니다. 원하는 수의 열로 래핑 할 수 있으며 (또는 전혀 래핑하지 않음) 여전히 작동합니다.

이제 이것을 MySQL로로드하려면 :

INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));

이것은 불만없이 삽입되며 문자열 내부의 텍스트를 수동으로 이스케이프 할 필요가 없습니다.


답변

문자를 사용하여 특수 문자를 이스케이프해야 \합니다.

This is Ashok's Pen.

된다 :

This is Ashok\'s Pen.