Debian
如何解決此語言環境問題?
我正在設置一個 Docker 建構,它允許我從 Linux 連接到 SQL Server。據我所知,這與這個問題幾乎無關,但它可能,因為我很困惑!
我的形象基於 Debian,因為 Debian 又小又輕。我懷疑我錯過了一些語言環境的東西,這就是造成這種情況的原因,但我不知道。
無論如何,這是我的命令+錯誤:
$ perl -MDBI -MData::Dumper -E'say Dumper(DBI->connect("dbi:ODBC:server=10.6.6.17;port=1433;database=Lynx;driver=ODBC Driver 11 for SQL Server;uid=sa;pwd=password")->selectall_arrayref("SELECT * FROM Setup"))' terminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::_S_create_c_locale name not valid
對我來說,這看起來像是一個 C++ 錯誤,可能與 SQL Server ODBC 驅動程序有關;它可能是 C++。
我試過了:
export LC_ALL=C
export LC_ALL=C.UTF-8
export LC_ALL=en_US.UTF-8
export LC_ALL=en_US
export LC_ALL=POSIX
apt-get install locales
locale-gen
並且取得了零進展。有任何想法嗎?
附錄:以下是我的實際Dockerfile;它肯定是不完整的,並且可以使用一些愛,但它可能會幫助您重現此錯誤(請注意,我的命令中的連接字元串最終需要調整以指向真正的 SQL Server,但不要重現此問題。)
FROM perl:5.20.1 RUN wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz && \ tar xf unixODBC-2.3.2.tar.gz && \ cd /root/unixODBC-2.3.2 && \ ./configure --disable-gui --disable-drivers --enable-stats=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE && \ make && \ make install && \ echo "include /usr/local/lib" >> /etc/ld.so.conf && \ ldconfig RUN ln -s /usr/local/lib/libodbc.so.2 /usr/lib/libodbc.so.1 && \ ln -s /usr/local/lib/libodbccr.so.2 /usr/lib/libodbccr.so.1 && \ ln -s /usr/local/lib/libodbcinst.so.2 /usr/lib/libodbcinst.so.1 && \ ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /usr/lib/libssl.so.10 && \ ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.10 RUN wget http://download.microsoft.com/download/B/C/D/BCDD264C-7517-4B7D-8159-C99FC5535680/RedHat6/msodbcsql-11.0.2270.0.tar.gz && \ tar xf msodbcsql-11.0.2270.0.tar.gz && \ cd /root/msodbcsql-11.0.2270.0 && \ bash install.sh install --force --accept-license RUN wget https://cpan.metacpan.org/authors/id/M/MJ/MJEVANS/DBD-ODBC-1.50.tar.gz && \ tar xf DBD-ODBC-1.50.tar.gz && \ cd /root/DBD-ODBC-1.50 && \ perl Makefile.PL -u && \ cpanm --installdeps . && \ make && \ make test && \ make install
我想到了!
我需要按照以下步驟操作:
export DEBIAN_FRONTEND=noninteractive apt-get install locales echo "en_US.UTF-8 UTF-8" > /etc/locale.gen locale-gen
然後其餘的工作!