CircleCI로 Laravel + SQLServer를 구축하면 오류가 발생했습니다.

발생한 현상에



오류 내용


SQLSTATE[HY000]: General error: 4004 Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. [4004] (severity 16) [(null)] (SQL: 

.circleci/config(각종 버전)


  build:
    docker:
      - image: circleci/php:7.1-node-browsers
      - image: microsoft/mssql-server-linux:2017-CU8
        environment:
          - ACCEPT_EULA: Y
          - SA_PASSWORD: 1234abcD
  steps:
      - checkout # special step to check out source code to working directory
      - run: sudo apt install -y zlib1g-dev ruby freetds-dev unixodbc-dev imagemagick libmagickcore-dev libmagickwand-dev apt-transport-https
      - run: curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
      - run: curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
      - run: sudo apt update
      - run: sudo ACCEPT_EULA=Y apt install -y mssql-tools unixodbc-dev

조사 방법



circleci에 ssh 로그인하여 여러가지 두드려 보자


  • circleci에서 build가 실패한 사물에 대해 SSH를 활성화하고 Rebuild


  • 가장 마지막에 SSH에 로그인 방법이 나오므로 로그인한다. Github에 등록되어 있는 공개키와 관련된 비밀키가 필요하므로 잊지 않도록!


  • 조사 시작

  • sqlcmd를 두드려보십시오



    주의점/opt/mssql-tools/bin/ 에는 패스를 통해 없기 때문에 전부 두드리지 않으면 안 된다!
    $ /opt/mssql-tools/bin/sqlcmd
    

    Laravel과 통신하는 freetds를 의심



    우선 설치에서
    $ sudo apt-get install freetds-bin
    $ tsql -C
    Compile-time settings (established with the "configure" script)
                                Version: freetds v0.91
                 freetds.conf directory: /etc/freetds
         MS db-lib source compatibility: no
            Sybase binary compatibility: yes
                          Thread safety: yes
                          iconv library: yes
                            TDS version: 4.2
                                  iODBC: no
                               unixodbc: yes
                  SSPI "trusted" logins: no
                               Kerberos: yes
    
    

    연결하여 다양한 확인
    $ tsql -S 0.0.0.0 -U [hogehoge] -P [hogehoge]
    locale is "C.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1> select @@version
    2> GO
    
    Microsoft SQL Server 2017 (RTM-CU8) (KB4338363) - 14.0.3029.16 (X64)
        Jun 13 2018 13:35:56
        Copyright (C) 2017 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 16.04.4 LTS)
    (1 row affected)
    1> use hogehoge
    2> GO
    1> SELECT TOP 1 * FROM hogehoge
    2> GO
    Msg 4004 (severity 16, state 1) from 030843d6b223 Line 1:
        "Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier."
    

    아. freetds 주위의 설정 같네요. .

    해결 방법



    CircleCI에 freets에 반영하기



    오류로 여기와 돈 피샤
    htp //php. 네 t / 마누아 l / 그럼 / 훙 c 치온. msql 쿠에 ry. php #105843

    그러므로
            tds version = 8.0
            client charset = UTF-8
    

    추가해 주시면

    그런 추가한 freetds.conf 를 Git에 준비
    이번에는 .circleci/freetds.conf에 준비했습니다.
    사족이지만 .circleci 주위에만 사용하는 것은 .circleci 디렉토리에 모으는 경향이 있습니다. . .
      build:
        docker:
          - image: circleci/php:7.1-node-browsers
          - image: microsoft/mssql-server-linux:2017-CU8
            environment:
              - ACCEPT_EULA: Y
              - SA_PASSWORD: 1234abcD
      steps:
          - checkout # special step to check out source code to working directory
          - run: sudo apt install -y zlib1g-dev ruby freetds-dev unixodbc-dev imagemagick libmagickcore-dev libmagickwand-dev apt-transport-https
          - run: curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
          - run: curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
          - run: sudo cp .circleci/freetds.conf /etc/freetds/freetds.conf
          - run: sudo apt update
          - run: sudo ACCEPT_EULA=Y apt install -y mssql-tools unixodbc-dev
    

    이제 문제가 사라졌습니다.
    좋았어요.

    좋은 웹페이지 즐겨찾기