在mysql中使用REGEXP时出错

时间:2016-03-14 11:25:36

标签: php mysql apache

REGEXP - REG#1139 -

中使用mysql时出错
  

收到错误'这个版本的PCRE编译时没有UTF支持偏移0'

来自xampp ubuntu的正则表达式, PHP版本5.6.15 mysqlnd 5.0.11-dev - 20120503

1 个答案:

答案 0 :(得分:8)

从ubuntu 14.04升级到16.04后,我遇到了同样的错误。

我使用lampp 5.6.20并且在使用REGEXP的请求中出现了相同的错误。

使用以下命令,我发现这个lib doens没有UTF-8支持:

var re = /[^\W_]+(?:\[([^\][]*)]|-([^_]+))/g; 
var str = '_foo-2_bar-12_un[3;1]iver[3]se[3-7]';
var res = [];
while ((m = re.exec(str)) !== null) {
   res.push(m[0]);
   if (m[1]) {
     res.push(m[1]);
   } else {
     res.push(m[2]);
   }
}

document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

我发现我必须使用以下选项重新编译我的灯泡PCRE:

$ /opt/lampp/bin/pcretest -C

...
No UTF-8 support
...

为此,我下载了pcre-8.38并在解压缩的文件夹中执行了下一个命令:

--enable-utf8 --enable-unicode-properties

然后我将$ ./configure --enable-utf8 --enable-unicode-properties $ make $ sudo make install 文件夹中的所有生成文件复制到.libs文件夹:

/opt/lampp/lib

然后确认支持UTF-8:

$ sudo cp .libs/* /opt/lampp/lib

最后我重启了我的灯(重启mysql或MariaDB):

$ /opt/lampp/bin/pcretest -C

...
UTF-8 support
...