2011-08-30 4 views
2

PHP에서 유니 코드 문자를 포함하는 변수가있을 때 MySQL 데이터베이스에 저장하는 것에 대해 걱정할 필요가 있습니까?MySQL 데이터베이스의 유니 코드 문자 수를 계산합니다.

가변 값 Dejan Čolić이 있다고 가정 해 봅시다. 유니 코드 문자는 2 문자 (또는 4, 확실하지 않습니다)를 사용한다고 가정합니다. 그렇다면 내 변수는 11 번째 문자 대신 데이터베이스에서 13/17 문자 길이로 지정됩니다. 내가 맞습니까?

내가 맞다면 올바른 유니 코드 문자 수를 계산하는 데 도움이되는 PHP 함수가 있습니까? 감사.

+1

유니 코드에 대한 일반적인 게시물은 다음과 같습니다. http://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/6163129#6163129 [Symbola] (http://users.teilar.gr/~g1951d/) 글꼴이 설치됨 – NullUserException

+0

유니 코드 문자의 길이가 가변적이므로 1 바이트에서 4 바이트까지 사용할 수 있습니다 (UTF-8에서는 최대 6 바이트/문자까지 허용) – NullUserException

답변

0

문자는 문자입니다. 11 문자는 환경에 관계없이 11 문자입니다. MySQL이 UTF-8로 인코딩 된 데이터를 제공하는지 알지 못하는 경우 바이트을 잘못 해석하고 잘못된 인코딩을 가정하여 다른 문자 수를 도출 할 수 있습니다. 그러나 MySQL이 올바른 인코딩을 알게되면 11 문자이됩니다.

MySQL은 UTF-8 데이터를 비효율적으로 저장하기 때문에 더 많은 데이터가 바이트이고, MySQL에서는 훨씬 더 많은 바이트가됩니다.

+0

내 시험 'Dejan Čolić'은 21 점을,'Dejan Colic'은 11 점을주었습니다. (GET에서'strlen()'과'mb_strlen()'을 가지고) –

+0

@Dejan 어떤 인코딩이 텍스트이고 어떤 인코딩이'mb_strlen' *이 텍스트가 있다고 생각 하는가? 'mb_strlen'의 두 번째'$ encoding' 매개 변수를 사용해보십시오. – deceze

+0

@Dejan BTW, 이것을 읽으면 주제를 파악하는 데 도움이 될 수 있습니다. http://kunststube.net/encoding/ – deceze

1

PHP : mb_strlen()
MySQL은 : CHAR_LENGTH()

+0

제 테스트에서'mb_strlen()'과'strlen()'은 같은 결과를줍니다. 어떤 차이가 있습니까? –

+0

strlen()은 벙어리이며 counts 바이트입니다. mb_strlen은 유니 코드를 인식하고 문자를 카운트합니다. ASCII 문자열에서 작업하는 경우에는 동일합니다. 그렇지 않으면 strlen이 초과 계산됩니다. –

+0

글쎄,'strlen()'은 실제로 필요한 것입니다. 왜냐하면 MySQL은 바이트 길이로 문자를 저장할 것이기 때문입니다 ('Č','ć' 등의 문자가 있다면). 내가 맞습니까? –