code: func ParseBitStr(s string) (BinaryLiteral, error) {
  	if len(s) == 0 {
  		return nil, errors.Errorf("invalid empty string for parsing bit type")
  	}
  
  	if s[0] == 'b' || s[0] == 'B' {
  		// format is b'val' or B'val'
  		s = strings.Trim(s[1:], "'")
  	} else if strings.HasPrefix(s, "0b") {
  		s = s[2:]
  	} else {
  		// here means format is not b'val', B'val' or 0bval.
  		return nil, errors.Errorf("invalid bit type format %s", s)
  	}
  
  	if len(s) == 0 {
  		return ZeroBinaryLiteral, nil
  	}
  
  	alignedLength := (len(s) + 7) &^ 7
  	s = ("00000000" + s)[len(s)+8-alignedLength:] // Pad with zero (slice from `-alignedLength`)
  	byteLength := len(s) >> 3
  	buf := make([]byte, byteLength)
  
  	for i := 0; i < byteLength; i++ {
  		strPosition := i << 3
  		val, err := strconv.ParseUint(s[strPosition:strPosition+8], 2, 8)
  		if err != nil {
  			return nil, errors.Trace(err)
  		}
  		buf[i] = byte(val)
  	}
  
  	return buf, nil
  }
docs: // ParseBitStr parses bit string.
  // The string format can be b'val', B'val' or 0bval, val must be 0 or 1.
  // See https://dev.mysql.com/doc/refman/5.7/en/bit-value-literals.html